如何设置变量指向全局对象-独立于上下文执行



谁能给我解释一下这到底是什么意思?

!function (global, moduleDefinition) {
  'use strict';
  var dependencies = [];
  if (typeof define === 'function' && define.amd) {
    define(dependencies, moduleDefinition);
  } else if (typeof exports === 'object') {
    module.exports = moduleDefinition.apply(null, dependencies);
  } else {
    global.Utilities = moduleDefinition.apply(null, dependencies);
  }
}(this, function () {
  'use strict';
  var Utilities = {};
  return Utilities;
});

这已经传递给我,作为我们的新模块。

  • !感叹号(或任何其他符号)将代码转换为表达式-您可以立即调用它

(function() {}());
!function() {}();

错误的版本

你不能调用函数声明!

function() {}() // wrong, don’t try to run this

可以将参数传递给被调用的函数

(function(foo) {
    console.log(foo, foo === 3); //3, true foo is equal to passed value
}(3));

你可以传递全局对象-在浏览器环境中,它指向窗口对象,在Node -它指向全局对象。因为我们想要编写一个版本的代码,而不是为了环境检测而将其分叉,所以使用global作为可以保存指向全局对象的指针的变量更简单。比较window.setTimeout(浏览器)与this.setTimeout(节点)与global.setTimeout(两者)

(function(global) {
    global.setTimeout(function() {
        console.log('I’m running independent to browser or server environment');
    }, 1000);
}(this));

你错过了moduleDefinition的一些东西,休息在哪里?

这意味着该语句后面的代码必须在严格模式下运行。这可以用来确保在后面的代码中没有错误。

关于严格模式的更多信息:http://www.w3schools.com/js/js_strict.asp

最新更新