js 深入閉包(作用域 下)

2021-06-21 23:58:47 字數 1515 閱讀 5502

function fn1() 

}return fns;}

var fs = fn1();

for(var i=0;i

---------------------------解決方案------------------------------

function fn1()

}tf(i);

}return fns;}

var fs = fn1();

for(var i=0;i

---------------------------塊作用域------------------------------

for(var i=0;i<10;i++)

//在js中沒有塊作用域,不管是使用迴圈還是判斷之後,這個變數一直存在

/*** 所以當在全域性使用某個變數進行迴圈或判斷之後,這個變數可能會影響到函式的變數,所以

* 所以在特殊情況下不要使用全域性變數,而且全域性變數在作用域鏈的最上層,訪問是最慢的。

*/console.log(i);

function fn1()

fn1();

/*** 在乙個團隊進行開發中,可能會涉及到定義同名的全域性變數,所以在開發中要養成乙個好習慣:

* 將全域性變數**放到乙個匿名函式,並且馬上呼叫匿名函式,這樣也可以執行全域性變數的**。

* 但是這些變數被控制在開發人員想要控制的作用域中。

*/解決辦法:將塊作用域定義在乙個匿名函式中。

(function()  

})(); //在function的{}後不能直接呼叫,一定要加把匿名函式放在()內再執行。

---------------------------私有變數------------------------------

function person(name) 

this.getname = function()}

var p = new person("zhang"); //zhang

console.log(p.getname());

p.setname("li");

console.log(p.getname()); //li

/**但是使用這種方式建立私有變數帶來的問題是每個物件要儲存大量函式。

* 解決的方法是通過靜態私有變數來解決。

*/---------------------------解決方案------------------------------

var person;

(function()

person.prototype.setname = function(value)

person.prototype.getname = function()

})();

var p1 = new person("aaa"); //aaa

console.log(p1.getname());

p1.setname("bbb"); //bbb

console.log(p1.getname());

js 作用域和閉包

作用域應用的特色情況,有兩種表現 自由變數的查詢,在函式定義的地方,向上級作用域查詢不是在執行的地方 函式作為返回值 function create const fn create const a 200 fn 100 函式作為引數 function print fn const a 100 fun...

JS作用域與閉包

vo ao 的解釋 1.作用域 es5中只有全域性作用域和函式作用域,我們都知道他沒有塊級作用域。es6中多了乙個let,他可以保證外層塊不受內層塊的影響。即內層塊形成了乙個塊級作用域,這是let的乙個特點。var a 1 function f1 f2 f1 2,1,2 上面的 有三個執行上下文環境...

作用域 閉包

1.js執行順序 語法分析 預編譯 先生成go物件 1.函式執行生成ao物件 2.形參和變數作為ao物件的鍵名,鍵值是undefined 3.實參賦值給形參 4.在函式中找到函式宣告,把函式作為ao物件的屬性名,屬性值為函式體 執行js 作用域 變數作用範圍 1.作用域 變數作用範圍 1 函式作用域...