今天寫代碼的時候發現 網頁上很多彈窗需要自動關閉
倒計時5秒之后用戶無操作就關閉了,(angular 框架),代碼如下,一:
for(var i=5;i>0;i--){ setTimeout((function(i){ return function(){ $scope.upstate="上傳失敗!"+(5-i)+"秒后本窗口關閉"; //$scope.upclosed(); //console.log($scope.upstate); $scope.$apply(); //console.log(new Date().getTime()); if(i==5){ $scope.upclosed(); } } })(i),i*1000); }
輸出結果是:
二: 稍加改動,去掉函數(),如下所示
for(var i=5;i>0;i--){ setTimeout(function(i){ return function(){ // $scope.upstate="上傳失敗!"+(5-i)+"秒后本窗口關閉"; window.upstate="上傳失敗!"+(5-i)+"秒后本窗口關閉"; //$scope.upclosed(); console.log(window.upstate); //$scope.$apply(); console.log(new Date().getTime()); if(i==5){ // $scope.upclosed(); } } }(i),i*1000); }
依然能夠正常使用
三: function(i){}(i) 兩個i都不能少 ,少了第一個 i的值會變成全是5,但是依然能夠按5,4,3,2,1的時間順序輸出5
少了第二個 i 的值會變成NAN
四:換一種方法 將整個setTimeout 都封起來
for(var i=5;i>0;i--){ (function(i){ setTimeout(function(){ // $scope.upstate="上傳失敗!"+(5-i)+"秒后本窗口關閉"; window.upstate="上傳失敗!"+(5-i)+"秒后本窗口關閉"; //$scope.upclosed(); console.log(window.upstate); //$scope.$apply(); console.log(new Date().getTime()); if(i==5){ // $scope.upclosed(); } },i*1000); })(i) }
也是 可以的 這個時候(function(){}())的最外層()不能去掉的