var ninja = (function(){
function Ninja(){};
return new Ninja();
})();
Run Code Online (Sandbox Code Playgroud)
为什么上面的函数封装在括号中,为什么();最后有?
我认为这是一个构造函数,因为();最后,但为什么对象包含在括号中?
小智 12
此代码相当于:
function Ninja() {
// nothing here
}
var ninja = new Ninja();
Run Code Online (Sandbox Code Playgroud)
虽然在您列出的代码中,函数/对象Ninja不是全局范围.
代码(function() {...})();基本上说"取这里包含的任何函数并立即执行".所以它创建了一个匿名函数并在之后调用它.
它被称为立即调用的函数表达式(或IIFE).它创建一个新范围并立即执行内容.它有很多用途; 我最常用的是当this关键字改变含义时,例如在
var someClass = function() {
this.property = something;
this.update = (function(obj) {
function() {
$('.el').each(function() {
$(this).html( obj.property );
});
};
)(this);
};
Run Code Online (Sandbox Code Playgroud)
虽然我想引用this.property里面的$('.el').each(),this改变了范围内的含义,指的是正在通过循环与当前的DOM元素.each().因此,通过this将参数作为参数传递给IIFE(并调用该参数obj),我可以obj.property用来指代什么this.property时候超出范围$('.el').each( ..., function() { ... });.
如果这有意义或者您有任何问题,请告诉我:)
| 归档时间: |
|
| 查看次数: |
1279 次 |
| 最近记录: |