Ang*_*bie 4 javascript codemirror self-executing-function
CodeMirror.net使用这个构造(我稍微简化)来为它的JavaScript编辑器引入代码:
(function(mod) {
this.CodeMirror = mod();
})(function() {
"use strict";
(15,000-odd lines of advanced JS)
}
Run Code Online (Sandbox Code Playgroud)
现在,我知道这是一个自动执行的功能,我已经阅读了很多关于它们的帖子.据我所知,实际上,这段代码正在创建一个CodeMirror对象.我只是不懂机制.
谢谢你的帮助.
在你的代码中:
(function(mod) {
this.CodeMirror = mod();
})(function() {
"use strict";
(15,000-odd lines of advanced JS)
}
Run Code Online (Sandbox Code Playgroud)
mod是立即调用函数的形式参数.这就好像函数以更直接的方式声明:
function something(mod) {
this.CodeMirror = mod();
}
Run Code Online (Sandbox Code Playgroud)
该函数显然希望mod参数将是对其他函数的引用,因为它唯一能做的就是用函数调用它.
事实上,使用函数调用立即调用的函数作为mod参数的值:具体来说,这个:
function() {
"use strict";
(15,000-odd lines of advanced JS)
}
Run Code Online (Sandbox Code Playgroud)
该函数执行它所做的任何事情,并且(可能)返回一个对象引用以用作全局CodeMirror入口点.
因为第一个函数 - 立即调用的函数 - 在没有任何显式this值的情况下被调用,所以它期望this将其设置为全局上下文的值,或者window在浏览器中.就个人而言,我认为明确地这样做会更安全:
(function(mod) {
this.CodeMirror = mod();
}).call(this, function() {
"use strict";
(15,000-odd lines of advanced JS)
})
Run Code Online (Sandbox Code Playgroud)
在全球范围内的词汇,它是保证this将在全球范围内,"严"模式或不是一个引用.但是如果简单地调用外部立即调用的函数,那么this将undefined处于"严格"模式并且初始化将失败.
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |