這篇文章帶給大家的內容是關於js中閉包的解釋以及變數宣告提前的例子(程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
閉包
在函數A中宣告了函數B,函數B中使用了函數A的作用域中的變數,且函數A返回(return)了函數B,那麼函數B就對函數A的作用域形成了閉包,函數A調用完畢之後,只要返回的函數B存在,函數A的作用域也一直存在
1 2 3 4 5 6 7 8 9 10 | function makeFn(){
var n1 = 100;
function fn(){
var n2 = 200;
console.log(n1);
}
return fn;
}
var f2 = makeFn();
f2();
|
登入後複製
閉包可以實現物件的私有屬性,如:
1 2 3 4 5 6 7 8 | var obj = {
name: "sunset" ,
age:12,
speak: function (){
console.log( "我是" +this.name);
}
}
console.log(obj.name);
|
登入後複製
再來一個範例:
1 2 3 4 5 6 7 8 9 10 11 | function makeObj(){
var name = "sunset" ;
var age = 12;
var obj = {
speak: function (){
console.log( "我叫" +name);
}
}
return obj;
}
console.log(obj.speak());
|
登入後複製
最後一個非常好的範例:(導入jQuery後執行看看)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <script>
for ( var i = 0; i < 10; i++) {
function makeFn(index) {
function fn() {
console.log(index)
}
return fn;
}
var btn = makeFn(i);
$( "<button></button>" )
.text(i + 1)
.appendTo(document.body)
.on( "click" ,btn)
}
</script>
|
登入後複製
變數宣告提前:
在js的作用域中,所有變數的宣告都會被提前,但是賦值不會提前(變數提前就不示範了,學到這已經不用解釋了)
1 2 3 4 5 6 7 | var a = 3;
function f1(){
console.log(a);
var a = 10;
}
f1();
|
登入後複製
等同於
1 2 3 4 5 6 | function f1(){
var a;
console.log(a);
a = 10;
}
f1();
|
登入後複製
相關推薦:
PHP 閉包取得外部變數和global關鍵字宣告變數的差異解說_ php實例
JS宣告變數詳解
#JavaScript閉包-閉包中的變數與this物件
以上是js中閉包的解釋以及變數宣告提前的例子(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!