level-20
3650 ワード
閉包とは何ですか何の効果がありますか
簡単に言えば、クローズドとは、他の作用領域の変数にアクセスできる関数を作成します.関数の内部と関数の外部をつなぐ橋に相当します.閉塞の役割:は、パッケージ化を実現し、クローズドにより、外部環境で関数内部の変数にアクセスすることができる. set Timeout 0はどんな役割がありますか?
JavaScriptの非同期を実現するには、通常はJavaScriptは単一スレッドで実行されます.つまり、複数のコードを同時に実行することはできません.あるコードが実行されている時には、後続のタスクはすべて待ち行列を形成し、現在のタスクが実行されたら、次のタスクをキューから取り出します.これはしばしば「閉塞式執行」と呼ばれる.setTimeout 0を使用すると、修飾文のロード順序が変更されます.例えば
簡単に言えば、クローズドとは、他の作用領域の変数にアクセスできる関数を作成します.関数の内部と関数の外部をつなぐ橋に相当します.閉塞の役割:
JavaScriptの非同期を実現するには、通常はJavaScriptは単一スレッドで実行されます.つまり、複数のコードを同時に実行することはできません.あるコードが実行されている時には、後続のタスクはすべて待ち行列を形成し、現在のタスクが実行されたら、次のタスクをキューから取り出します.これはしばしば「閉塞式執行」と呼ばれる.setTimeout 0を使用すると、修飾文のロード順序が変更されます.例えば
console.log(1);
setTimeout("console.log(2)",0);
console.log(3);
// 1,3,2
下のコードの出力はどれぐらいですか?コードを修正してfnAriにiを出力させる.二つ以上の方法を使う. var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function(){
return i;
};
}
console.log( fnArr[3]() );
//
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function(){
var b=i;
return function(){
return b;
}
}(i);
}
console.log( fnArr[3]() );
// 。
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function arr(){
return arr.fn;
};
fnArr[i].fn=i;
}
console.log( fnArr[3]() );
クローズドパッケージを使って車の対象を一つ包装し、次のように車の状態を取得することができます.var Car = function (){
var speed;
function setSpeed(num){
speed=num;
}
function getSpeed(){
console.log(speed);
return speed;
}
function accelerate(){
speed+=10;
}
function decelerate(){
speed-=10;
}
function getStatus(){
if(speed==0){
console.log("stop");
}
else{
console.log("running");
}
}
return{
speed:speed,
setSpeed:setSpeed,
getSpeed:getSpeed,
accelerate:accelerate,
decelerate:decelerate,
getStatus:getStatus,
}
}();
Car.setSpeed(30);
Car.getSpeed(); //30
Car.accelerate();
Car.getSpeed(); //40;
Car.decelerate();
Car.decelerate();
Car.getSpeed(); //20
Car.getStatus(); // 'running';
Car.decelerate();
Car.decelerate();
Car.getStatus(); //'stop';
// Car.speed; //error
3.次の関数を書くsetTimeoutアナログsetIntervalの機能を使うfunction add(){
var time=new Date();
console.log(" "+time.getHours()+" "+time.getMinutes()+" "+time.getSeconds()+" ");
add();
}
setTimeout("add()",1000);
// setInterval("add()",1000);
関数を書いて、setTimeoutの最小時間粒度を計算します.function getTime(){
var start=new Date();
var a=0;
var click=setTimeout(function(){
a++;
if(a==1000){
clearTimeout(click);
var end=new Date();
time=((end-start)/1000);
console.log(time);
}
click= setTimeout(arguments.callee, 0);
},0)
}
getTime();//4.06
このコードの出力結果は?なぜですかvar a = 1;
setTimeout(function(){
a = 2;
console.log(a);//2
}, 0);
var a ;
console.log(a);//1
a = 3;
console.log(a);//3
// 1、3、2;
// setTimeot 0 , function(){} 。
このコードの出力結果は?なぜですかvar flag = true;
setTimeout(function(){
flag = false;
},0)
while(flag){}
console.log(flag);
// while 。 。
// setTimeout 0 , function(){}, , 。
// while(flag){} , 。 。
このコードの出力は以下の通りですか?どのようにdelayer:0を出力しますか?delayer:1…for(var i=0;i<5;i++){
(function(){
var a=i;
setTimeout(function(){
console.log('delayer:' + a );
}, 0);
}())
console.log(i);
}