摘要:張三李四李四李四鏈式作用域函數(shù)包含在函數(shù)中,這是函數(shù)所有局部變量對函數(shù)可見,但是相反是不行的。局部變量必須使用聲明,否則聲明的是全局變量。父級函數(shù)變量對所有子函數(shù)可見,子函數(shù)會一級一級向上尋找變量。
引言
一直從事服務(wù)端開發(fā)。由于近年來前端迅速發(fā)展,所以想入坑前端行列,雖然一直有接觸并開發(fā)前端相關(guān)的項目,但是想要做前端的工作決定系統(tǒng)的學習一下前端,就先從變量開始吧!
變量的作用域在js中變量的作用域只有兩種,全局變量、局部變量
全局變量
在函數(shù)內(nèi),全局變量可以直接訪問
// 全局變量 var name = "張三" function showName() { console.log(name); } showName(); // 張三
局部變量
自然局部變量不可以在函數(shù)外部訪問
// 局部變量 function showName2() { var name2 = "李四" } console.log(name2) // error: Uncaught ReferenceError: name2 is not defined
聲明局部變量必須使用 var,否則聲明的則是全局變量
// 局部變量 function showName3() { name3 = "王五" } showName3(); console.log(name3) // 王五
如果局部變量與全部變量名稱一樣會怎么樣呢?
js 不會像服務(wù)端語言那樣名稱一樣會產(chǎn)生沖突。通過下面的例子看到,函數(shù)會先找局部變量,也就是說局部變量的優(yōu)先級要比全局變量的優(yōu)先級要高。
var name = "張三" function showName() { var name = "李四" console.log(name) // 李四 } showName(); console.log(name) // 王五
剛才說過局部變量必須使用var聲明,否則聲明的是全局變量。如果已存在相同名稱的全局變量會怎么樣呢?
在函數(shù)執(zhí)行后,會改變?nèi)肿兞康闹怠?/p>
var name = "張三" function showName() { name = "李四" console.log(name) // 李四 } showName(); console.log(name) // 李四
鏈式作用域
showName2 函數(shù)包含在 showName 函數(shù)中,這是 showName 函數(shù)所有局部變量對 showName2 函數(shù)可見,但是相反是不行的。
通過情景三,可以看出來子函數(shù)回向父級一級一級尋找變量,所有父級的變量對子級都是可見的,這就是js的 “鏈式作用域”
// 情景一 function showName() { var name = "張三" function showName2() { var name = "李四" return name } return showName2() } var result = showName() console.log(result) // 李四
// 情景二 function showName() { var name = "張三"; function showName2() { return name; } return showName2() } var result = showName() console.log(result) // 張三
// 情景三 function showName() { var name = "張三"; function showName2() { function showName3() { return name; } return showName3() } return showName2(); } var result = showName() console.log(result) // 張三結(jié)
js 作用域分全局變量與局部變量。
局部變量必須使用 var 聲明,否則聲明的是全局變量。
函數(shù)可以直接訪問全局變量,外部不可使用局部變量。
全局變量與局部變量名稱可以重復(fù),局部變量優(yōu)先級更高。
父級函數(shù)變量對所有子函數(shù)可見,子函數(shù)會一級一級向上尋找變量。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/103238.html
摘要:組件化編碼的一切都是基于組件的。屬性返回目標節(jié)點的前一個兄弟節(jié)點。如果目標節(jié)點前面沒有同屬于一個父節(jié)點的節(jié)點,將返回屬性是一個只讀屬性。而當變量離開環(huán)境時,則將其標記為離開環(huán)境。 第一次寫面試經(jīng)歷,雖然之前有過一些電話面試經(jīng)歷,但相對而言感覺此次的經(jīng)歷對自己收獲還是比較大,這里留下面經(jīng)當作日記吧?。嬖嚂r間:2018-6-12 下午2:10;時長:50min;公司:*) 1、說說Rea...
摘要:組件化編碼的一切都是基于組件的。屬性返回目標節(jié)點的前一個兄弟節(jié)點。如果目標節(jié)點前面沒有同屬于一個父節(jié)點的節(jié)點,將返回屬性是一個只讀屬性。而當變量離開環(huán)境時,則將其標記為離開環(huán)境。 第一次寫面試經(jīng)歷,雖然之前有過一些電話面試經(jīng)歷,但相對而言感覺此次的經(jīng)歷對自己收獲還是比較大,這里留下面經(jīng)當作日記吧?。嬖嚂r間:2018-6-12 下午2:10;時長:50min;公司:*) 1、說說Rea...
摘要:閉包在解釋閉包,指的是詞法表示包括不被計算的變量的函數(shù),也就是說,函數(shù)可以使用函數(shù)之外定義的變量。再把這個函數(shù)賦值給多個變量執(zhí)行時,會依次創(chuàng)建多個閉包引入的變量副本,并且相互不會污染。 閉包在 ECMAScript 解釋 閉包,指的是詞法表示包括不被計算的變量的函數(shù),也就是說,函數(shù)可以使用函數(shù)之外定義的變量。地址: https://www.w3cschool.cn/ecma... 下面...
閱讀 3198·2020-01-08 12:17
閱讀 2053·2019-08-30 15:54
閱讀 1211·2019-08-30 15:52
閱讀 2105·2019-08-29 17:18
閱讀 1095·2019-08-29 15:34
閱讀 2520·2019-08-27 10:58
閱讀 1932·2019-08-26 12:24
閱讀 440·2019-08-23 18:23