请解释下面的JavaScript语句?
这个问题在这里已经有了答案:
此代码相当于:
function Ninja() {
// nothing here
}
var ninja = new Ninja();
尽管在你列出的代码中,函数/对象Ninja不是全局范围。
代码(function() {...})();
基本上说“把这里面包含的任何函数都包含进来,然后立即执行”。 所以它创建了一个匿名函数并在之后调用它。
它被称为立即调用函数表达式(或IIFE)。 它创建一个新的范围并立即执行内容。 它有很多用途; 我使用最多的是当this
关键字会改变含义,例如
var someClass = function() {
this.property = something;
this.update = (function(obj) {
function() {
$('.el').each(function() {
$(this).html( obj.property );
});
};
)(this);
};
虽然我想在$('.el').each()
引用this.property
,但this
改变该范围内的含义,并引用当前正在使用.each()
循环的DOM元素。 所以通过将this
参数作为参数传入IIFE(并调用参数obj
),我可以使用obj.property
来引用在$('.el').each( ..., function() { ... });
范围之外的this.property
$('.el').each( ..., function() { ... });
。
让我知道如果这是有道理的,或者如果你有任何问题:)
为什么函数声明封装在'('s中,并且为什么最后还是有'();'
它同时声明和执行函数。
你可能会看到:被命名的函数表达式被揭秘 - 由Juriy“kangax”Zaytsev
链接地址: http://www.djcxy.com/p/1475.html