首页 > 代码库 > javascript高级知识点——临时作用域
javascript高级知识点——临时作用域
代码信息来自于http://ejohn.org/apps/learn/。
自执行,临时,函数
(function(){ var count = 0; })();
这是一个简单的自执行匿名函数。
做一个点击计数
document.addEventListener("click", (function(){ var numClicks = 0; return function(){ alert( ++numClicks ); };})(), false);
关键代码是,自执行匿名函数,返回一个函数,点击就触发这个函数,根据闭包作用域链,可以访问自执行匿名函数的变量numClick。
为什么值相同?
for ( var d = 0; d < 3; d++ ) setTimeout(function(){ console.log( d ); //2 //2 //2 }, 200);
在200ms的时候匿名函数运行三次,根据作用域链,它引用d,此时外部for早已循环完毕,d为3。
怎么才能正常输出?
for ( var d = 0; d < 3; d++ ) (function(d){ setTimeout(function(){ console.log( d );
//0
//1
//2 }, 200); })(d);
这里里面的匿名函数引用的d实际是自执行函数的参数,函数执行三次,彼此独立,接收的参数依次为0,1,2。这是自执行函数的典型运用。
在包装库的时候,匿名函数十分有用。
(function(){ var myLib = window.myLib = function(){ // Initialize }; // ... })();
开发库时,我们要做到不影响全局命名空间。利用自执行匿名函数可以很好的坐到这一点,使得库内部的变量都是私有的,并可以选择性的对外部变量提供接口。
另一种写法
var myLib = (function(){ function myLib(){ // Initialize } // ... return myLib; })();
javascript高级知识点——临时作用域
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。