(function(global, $data, undefined) {
$data.Entity.extend('TodoDBModel.TodoItem', {
'Id': { key:true,type:'Edm.Guid',nullable:false,required:true },
'InSync': { type:'Edm.Boolean',nullable:false,required:true }
});
})(window, $data);
Run Code Online (Sandbox Code Playgroud)
这个简单的函数还是任何类型的类?
我们如何定义这些参数global, $data, undefined以及以函数括号和(window, $data)参数结尾的最后一行代码?
它被称为IIFE - 立即调用函数表达式.
引用维基百科:
立即调用的函数表达式(或IIFE,发音为"iffy")是一种JavaScript设计模式,它使用JavaScript的函数作用域生成词法范围.立即调用的函数表达式可用于避免块内的变量提升,防止污染全局环境,同时允许公共访问方法,同时保留函数中定义的变量的隐私.这种模式被称为自执行匿名函数,但Ben Alman引入了术语IIFE作为模式的语义更准确的术语.
这里发生的是你定义一个函数(通过函数表达式)并立即调用它.这提供了封装.
例如,如果有人要覆盖语言原始值类型undefined*的值,它将把它作为第三个参数.它还提供对两个参数的访问(数据,代码中的变量和window浏览器中的全局对象)global.
*严肃地说,有没有人真正覆盖undefined?而且,在现代浏览器中它是不可能的
这是一个更基本的例子:
(function(i){ // declare a function that accepts a single parameter - i
alert(i);//alert the value of i
// Next, we'll invoke the function we just declared with the value 5,
// which means i will be 5 in the function
})(5);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |