javascript框架如何拥有自己的工作空间
how javascript framework have own workspace?
可能重复:
javascript创建INcode工作区(框架(
在过去的几天里,我对Javascript框架如何拥有自己的工作区很感兴趣,我的意思是,他们如何以任何想要的名称调用变量,并在不涉及局部变量的情况下使用它。
我现在正在编写一个API,并且我正面临局部变量/函数局部名称的问题,如果它们已经存在的话。
所以,我所做的是研究框架是如何工作的,我看到他们使用了这样的名称空间函数:
(function(){ .... })()
所以我试着做一些类似的事情
<html>
<head>
<script type="text/javascript">
(function() {
function f(toAlert) { alert(toAlert); }
})();
</script>
</head>
<body>
<script>
toAlert("hi");
</script>
</body>
</html>
但它不起作用。。
所以我有几个问题:
如何在javascript中有一个工作区来设置我想要的任何变量名(如果函数也是,那就太好了(。
我看到框架使用"window"命令,这与命名空间函数"public"函数或w/e有关吗?
如果你能给我关于这一切的信息/教程,以及如何从开始到结束,我会很高兴
当然它不起作用,因为f(toAlert)
函数只在立即执行的函数闭包范围内可见。你还试图调用一些一开始就不存在的函数。您的闭包函数被称为f
(并且有toAlert
参数(,然后您试图调用未在任何地方定义的函数toAlert
。不在全局范围内,也不在关闭范围内。
范围
这段代码可能会帮你理清思路。阅读评论。
<script type="text/javascript">
// global scope
function globalFunc(text) {
alert(text);
}
var privateFunc = null;
// function closure scope
(function(){
// closure function
function closureFunc(text) {
// can call global
globalFunc(text);
}
// let's make closure function accessible from global scope
// since privateFunc variable is in global scope
privateFunc = closureFunc;
})();
// call closure function
privateFunc("calling closure function");
// ERROR: this will not work due to function being in closure scope
closureFunc("calling closure function");
</script>
正在创建本地作用域
那个奇怪的函数圆括号到底做什么?
这是一些功能:
function name(someParameter) { ... }
把它放在括号里,并在末尾添加一些,立即执行:
(function name(someParameter) { ... })("Parameter text value");
注意函数参数。。。
为什么库使用本地作用域
图书馆通常使用本地作用域来避免污染,更重要的是与其他可能的图书馆发生冲突。想想两个库,它们都将定义一个名为getName
的函数。定义它的最后一个库将简单地覆盖第一个库的实现,从而使第一个库发生故障。
当每个库创建自己的闭包范围时,它们可以在其中创建任何函数、变量并使用它们,而不用担心被重写。库通常只是将一些小部分公开到全局范围中,所以其他脚本实际上可以使用该库。
(function() {
var closureVar = "I'm local";
globalVar = "I'm global";
// or
window.globalVar2 = "I'm global equivalent";
})();
省略CCD_ 6或引用CCD_。
由于function f
是在另一个函数范围(外部(function(){..})()
(内声明的,因此脚本不起作用,因此仅用于本地(在同一范围内(。这实际上是使用这种构造的要点,而不是用剩下的函数和变量来扰乱全局环境。
没有toAlert
函数——它是函数f
的参数。然而,f
不在立即执行的匿名函数之外的范围内。
如果你想公开f
,你需要从匿名函数返回它,这样你就可以捕获并调用它
- 为什么这在IE中的工作方式与在Firefox中不同
- 为什么不'在JQuery中找到第二个css选择器的工作
- 按我自己的类克隆另一个元素的内容和顺序
- 让我自己的过滤器不工作
- 如何使我自己的javascript Math方法工作
- 自己的jQuery插件只工作在第一个选择器
- 使用自己的字体不工作
- 我自己的javascript类和addeventlistener模板不工作
- 适应谷歌表API Node.js快速开始与我自己的表工作,错误:错误:无法解析范围:类数据!
- 确定一个bug是浏览器的错误还是我自己的错误的工作流程是什么?
- 如何制作完全属于自己的编程语言?我试过了.(并# 39;t工作)
- 当将内联javascript移动到它自己的文件中时,页面不再正常工作
- javascript框架如何拥有自己的工作空间
- 有人能给我解释一下如何将这个递归函数添加到自己的工作中吗?
- React使用redux动作在自己的模块中不工作
- 创建我自己的插件-不工作
- Stack Overflow自己的电子邮件验证正则表达式工作得如何
- Jquery滑块不能与自己的Jquery变量一起工作
- 当我从application.html.erb中取出它并将其放入自己的文件时,js代码不再工作
- jQuery -不能让导入的文件和自己的函数同时工作