精通Javascript 之 作用域和閉包

2021-06-09 04:09:26 字數 858 閱讀 2554

js裡作用域是由函式劃分的,而不是由塊(while、if和for)劃分。函式可以直接讀取全域性變數,但是外部無法直接訪問函式內部的變數。

閉包的意思是內層的函式可以引用存在於包圍它的函式內的變數,即使外層函式的執行已經終止。閉包之於js是非常重要的概念。

假設說有這麼乙個例子:

function f1()

f1();

alert(n); // 999,外部使用到這個變數

假設我們真的需要完成這樣乙個功能,n這個全域性變數的宣告是不合適的,這是乙個壞習慣,誰也不知道你在函式內部還宣告了乙個名為n的全域性變數。所以我們需要把n藏起來

function f1()

return f2;

}   var result=f1();

result(); //這個就是執行函式f2

這個方法通過建立乙個f2這個函式把n變數讀取到外部,並執行和第一段**相同的功能。這個就是閉包最基礎的用法,外部呼叫函式內部的變數。閉包還能使這個變數值始終保持在記憶體裡,看下面這個應用:

function f1()

function f2()

return f2;

}var result=f1();

result(); // 999

nadd();

result(); // 1000

為什麼n的值始終保持在記憶體裡呢?f1函式的執行結果f2在外部被賦予給乙個全域性變數,所以f2裡面的內容不會被**,n變數值一直被儲存著。而nadd呢是被定義的乙個全域性變數而且是個匿名函式,也相當於乙個閉包可以對n進行操作。所以第二個result的執行結果是1000.

python之作用域

跟很多程式語言一樣,python中也有作用域的使用 函式和變數分有公開的以及非公開的 正常的函式和變數名是公開的 public 比如abc,x123,pi 類似 這樣的變數是特殊變數,可以被直接引用,但是有特殊用途,我們自己的變數一般不用這種變數名 類似 和 的函式和變數就是非公開的private,...

js之作用域

1.什麼是作用域 作用域是用於收集儲存維護變數,以及當前執行 宣告的變數所擁有的許可權,例如 function foo a foo1 666 function foo2 a g a 在foo2函式中 a向g賦值 此時g在foo2作用域中也不存在,他也向上查詢,遇到window物件,發現其中也沒有定義...

PHP基礎之作用域

將值付給超全域性變數 post num 10 function fun1 fun1 echo 將值付給超全域性變數 function fun2 fun2 echo get num word 泥萌 function fun1 fun1 echo function fun2 fun2 echo word...