這個問題更多的是JavaScript原則。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(){
功能definintion放在這裏}())
將所有這三種類型中覆寫全局定義的函數()完成或任何其他()完成被內部定義的函數他們各自的關閉?
如果上面的問題沒有意義,這裏是改寫;
- 是下面的代碼應該在任何JS運行時做同樣的事情?
eval
- 任何地方的代碼都可以在上下文或全局範圍內執行該特定代碼?如何才能
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); }()); }
不要用你的第二個超時的方法。或者有什麼理由? – Bergi 2012-02-18 04:01:03