Inq*_*ive 1 javascript closures
我是java脚本的新手,目前正在阅读John Resig的Pro javascript技术.在解释闭包时,他将调用 setTimeout("otherFunction()",2000)称为新JS开发人员遇到问题的实例.我不明白为什么这是一个问题?有人可以解释一下吗?在这个http://www.w3schools.com/js/js_timing.asp我看到一个var t=setTimeout("alertMsg()",3000);类似于我的电话.
它不是 "错误的",它不一定是"正确的",并且肯定不推荐.
的setTimeout()函数的第一个参数可以是一个字符串或一功能参考/函数表达式.
如果你传递一个字符串,这将是有效的,因为你正在做的慢eval()这是不推荐使用.比速度更重要的是,字符串中的代码执行的范围可能不是您所期望的(并且在不同的浏览器中可能不同).
通过传递函数引用/函数表达式,可以避免这些问题.
您的示例的"正确"语法是:
setTimeout(otherFunction, 2000);
Run Code Online (Sandbox Code Playgroud)
注意之后没有括号otherFunction- 如果有,它会otherFunction()立即调用并将该函数的返回值传递给setTimeout().
如果需要将参数传递给函数,可以将其包装在匿名函数中:
setTimeout(function() {
otherFunction(param1, param2);
}, 2000);
Run Code Online (Sandbox Code Playgroud)
这似乎那种笨重相比,setTimeout("otherFunction(param1,param2)", 2000)但同样避免了在那里的范围问题otherFunction,param1和param2定义.
建议的方法是使用以下内容:
setTimeout(otherFunction, 2000);
Run Code Online (Sandbox Code Playgroud)
或封闭:
setTimeout(function() {
otherFunction();
}, 2000);
Run Code Online (Sandbox Code Playgroud)
不要使用带有字符串作为第一个参数的重载,因为javascript解释器需要将此字符串解析为javascript代码.
是的,您链接到http://www.w3schools.com的网站可能是学习编程的最差网站之一.它显示了你不应该做的事情.
| 归档时间: |
|
| 查看次数: |
635 次 |
| 最近记录: |