Tri*_*ung 17 javascript anonymous-function
我已经阅读了很多关于Javascript中的闭包的内容.我在mozilla.org上看到,封闭应该被定义为
(function(){...})();
但在http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html上,它说封闭功能是
(function(){...}());
有什么区别或后者是错的?last()的目的是什么?你会把一些参数放进去吗?我正在寻找一个很好的参考.
编辑:此外,Mozilla.org上有一个例子
var makeCounter = function() {
var privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment: function() {
changeBy(1);
},
decrement: function() {
changeBy(-1);
},
value: function() {
return privateCounter;
}
}
};
Run Code Online (Sandbox Code Playgroud)
为什么这个'功能'需要分号?如果需要在声明后立即调用,则应在结束分号之前放置a().但事实并非如此.
Ala*_*ter 21
语法
(function(){...})()
Run Code Online (Sandbox Code Playgroud)
只是一个立即调用的匿名函数.使用括号无关紧要,因为底层代码是一个被声明和调用的函数.
闭包用于描述一种情况,即函数可以访问在其范围之外声明的变量,可通过闭包访问
为清楚起见:
如果我们有以下功能
function hello() {
alert("Hello");
}
Run Code Online (Sandbox Code Playgroud)
我们可以用以下函数调用该函数
hello()
Run Code Online (Sandbox Code Playgroud)
它调用函数'hello'.但是如果我们不想给它起一个名字,但仍然会调用它,那么我们就可以做到
(function hello() {
alert("Hello");
})()
Run Code Online (Sandbox Code Playgroud)
这将与前一个调用示例完全相同 hello
但是,在这种情况下,给函数命名为'hello'是没有意义的,所以我们可以简单地删除它:
(function() {
alert("Hello");
})()
Run Code Online (Sandbox Code Playgroud)
这是您原始问题中使用的符号.
您的示例显示了立即调用的函数表达式或IIFE.它对翻译说:
是的,您可以将参数放在last()中.例如:
(
function(username){
alert("Hello " + username);
}
)("John Smith")
Run Code Online (Sandbox Code Playgroud)
闭包是javascript的一个特性,它允许我们实现数据隐藏,这大致相当于C++或Java等语言中的私有变量.
function getBmiCalculator(height, weight) {
// These are private vars
var height = height;
var weight = weight;
function calculateBmi(){
return weight / (height * height);
}
return calculateBmi;
}
var calc = getBmiCalculator(1.85, 90);
// calc still has access to the scope where height and weight live.
var bmi = calc();
alert(bmi);
Run Code Online (Sandbox Code Playgroud)
在这个例子中,高度和重量不能被垃圾收集,直到calc被破坏.存在高度和重量的记忆或"范围"部分是"封闭的"
| 归档时间: |
|
| 查看次数: |
9630 次 |
| 最近记录: |