【发布时间】:2012-03-09 10:44:30
【问题描述】:
这个问题更多是关于javascript原理的。
function done(){ console.log('done defined with `function done(){ ...`'); }
var done = function(){ console.log('done defined with `var done = ...`'); }
done = function(){ console.log('without `var`, just `done = ...`'); }
如果在<script> 标签内定义,它们都会做同样的事情,对吗?
但是如果我将它们放在一个闭包中 (function(){ 函数定义在这里 }()) 这三种类型中的任何一种都会覆盖全局定义的函数 done()或在各自的闭包中定义的任何其他 done() 函数?
如果上面的问题没有意义,那就换个说法;
- 以下代码是否应该在任何 JS 运行时中执行相同的操作?
-
eval-ing 代码在上下文或全局范围内执行特定代码? -
如何配置
setTimeout调用,以便其“引号”之间的代码在调用特定setTimeout的范围内执行(请参阅下面for内的第二个超时)?我的意思是除了定义window.blabla函数并告诉它们运行后删除自己之外还有其他方法吗?function done(d){ console.log('cha cha cha: '+d); } setTimeout( function(){ done(2); }, 3500 ); for(i=0; i<10; i++){ (function(){ done = function(x){ console.log('done #'+i+' sais: '+x); } setTimeout(function(){ done(i*2); },2500); setTimeout(function(){ done(i*2); }.toString()+'(); ',2500); }()); }
【问题讨论】:
-
不要使用第二种超时方法。还是有什么原因?
标签: javascript scope closures