js作用域與立即執行函式

2021-10-08 19:33:13 字數 2098 閱讀 8427

var a =10;

function

one(

)function

two(

)two()

;//10

a =10是全域性的,而 a =

20 是區域性的

一、

var a =10;

function

one(

)one()

;//undefined 一是預解析,而是就近查詢。

二、var a =

10;function

one(

)one()

;//10

這個雖然是就近原則,但是就近找var宣告的變數,因為a =

20沒有var宣告,只是修改了a的值,所以到外面去找了,輸出的是10.注意:當a =

20時,console.log進行輸出還沒執行到那。

var a =10;

function

one(

)one()

;//20

var a =

10function

one()}

one(

);

var a =10;

funtion one()

one(a)

;//10

js中傳參時,基本型別傳值,引用型別傳引用。

var a =5;

var b =5;

b +=

3console.

log(a)

;//5

var a =[1

,2,3

];var b = a;

b =[1,

2,3,

4];console.

log(a)

;//[1,2,3]

引數與變數一樣也是有作用域

var a =10;

function

one(a)

one();

//10

var a =10;

function

one(a)

one();

console.

log(a)

//13

一、js立即執行函式的寫法

第一種:最前最後加括號

(

function()

());

第二種:function外面加括號

(

function()

)();

第三種:function前面加運算子,常見的是!

!function()

();

二、立即執行函式的引數

可以給立即執行函式傳遞引數

(

function

(a,b)

("zimu"

,new

date()

));

注意:

1、立即執行函式內部是可以訪問外部變數的,所以很多情況下,我們並不需要傳引數。

三、立即執行函式的返回值

乙個立即執行函式也能返回值並且可以複製給其它變數

var result =

(function()

());

var result =

(function()

)();

四、立即執行函式的優勢

1、立即執行函式可以封裝大量的工作而不會遺留任何全域性變數。

2、定義的所有變數都會成為立即執行函式的區域性變數,所以你不用擔心這些臨時變數會汙染全域性空間。

五、注意點

立即執行函式通常作為乙個單獨模組使用。一般沒有問題。但是,建議在自己寫的立即執行函式前加分號,這樣可以有效地與前面**進行隔離。否則,可能出現意想不到的錯誤。

var a =

12var b =a(

function()

())//is not a function

js 作用域,作用域鏈,立即執行函式,閉包

作用域 1全域性作用域 全域性作用域就是最外層函式定義的變數,對任何內部函式來說,都是可以訪問的。2.區域性作用域 區域性作用域就是只在固定 片段內可以訪問到,在函式外部是無法訪問的。函式外是不可以訪問到函式內的,所以報錯。作用域鏈 scope 中所儲存的執行期上下文物件的集合,這個集合成鏈式鏈結,...

詞法作用域 VS 動態作用域 VS 立即執行函式

js詞法作用域是由你在寫 時將變數和塊作用域寫在 來決定。js動態作用域和this機制息息相關。它的作用域詩是在執行的過程中確定 var a 1 function foo foo 1從上面的 我們可以看出 foo中列印a的值不是由寫 的位置確定的,而是取決於foo執行的位置。最小授權原則最小授權原則...

js立即執行函式

void function func function param function param param function function function 這些可能在平時寫一些普通指令碼的時候不會用,也不常見,但是當你看別人的原始碼的時候就會發現,特別是一些js的外掛程式時候,是很常見的,初...