javascript嵌套函數(shù)和在函數(shù)內(nèi)調(diào)用外部函數(shù)的區(qū)別分析
我們都知道在函數(shù)中定義的局部變量在聲明他的函數(shù)體以及其嵌套的函數(shù)內(nèi)始終是有定義的,并且在函數(shù)的作用域鏈上始終會(huì)有個(gè)對(duì)象指向全局對(duì)象,使函數(shù)能夠訪問(wèn)到全局變量。
var ga = 'global';
var func = function() {
var la = 'local';
return function() {
return function()
{
return function()
{
alert(la);alert(ga);
}
}
}
}
a = func();
a()()();// 彈出 local 和 global
那么在外部定義的函數(shù)A, 被函數(shù)B在函數(shù)體內(nèi)調(diào)用時(shí),A能訪問(wèn)到B中定義的局部變量嗎?答案是否定的,把上面的例子稍作修改如下
var ga = 'global';
function repeat() {
alert(la);
}
var func = function() {
var la = 'local';
alert(1);
repeat();
alert(2);
};
func();
上面的運(yùn)行結(jié)果是只彈出了1,在調(diào)用repeat的時(shí)候,因?yàn)樵L問(wèn)了未定義變量js解釋器就報(bào)錯(cuò)把程序中斷了。
原因是函數(shù)在定義時(shí)保存了一個(gè)作用域鏈,repeat函數(shù)在外部定義,在他的作用域中并沒有一個(gè)局部變量叫l(wèi)a,繼續(xù)在全局作用域查找也沒找到la所以就會(huì)報(bào)錯(cuò)。
所以嵌套函數(shù)和在函數(shù)內(nèi)嵌套調(diào)用外部函數(shù)還是有很大區(qū)別的。
昨天在回答一個(gè)問(wèn)題http://www.dhdzp.com/article/78958.htm時(shí)引發(fā)的思考,雖然概念我明白,但是當(dāng)時(shí)一直想在函數(shù)內(nèi)部調(diào)用的repeat為什么訪問(wèn)不到調(diào)用他的函數(shù)的局部變量,今天又翻了下參考資料自己用代碼測(cè)試了一遍。希望這篇文章能幫助到有同樣困惑的朋友。
- 在html中引入外部js文件,并調(diào)用帶參函數(shù)的方法
- HTML頁(yè)面,測(cè)試JS對(duì)C函數(shù)的調(diào)用簡(jiǎn)單實(shí)例
- Angular外部使用js調(diào)用Angular控制器中的函數(shù)方法或變量用法示例
- 基于js里調(diào)用函數(shù)時(shí),函數(shù)名帶括號(hào)和不帶括號(hào)的區(qū)別
- 淺談js中調(diào)用函數(shù)時(shí)加不加括號(hào)的問(wèn)題
- 超鏈接怎么正確調(diào)用javascript函數(shù)
- JavaScript實(shí)現(xiàn)同時(shí)調(diào)用多個(gè)函數(shù)的方法
- JavaScript函數(shù)的調(diào)用以及參數(shù)傳遞
- 深入學(xué)習(xí) JavaScript中的函數(shù)調(diào)用
相關(guān)文章
自適應(yīng)方案postcss-pxtorem使用步驟
這篇文章主要介紹了如何使用postcss-pxtorem插件將px單位轉(zhuǎn)換為rem單位,包括安裝插件、創(chuàng)建配置文件和引入腳本的步驟,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-11-11
uniapp開發(fā)小程序的經(jīng)驗(yàn)總結(jié)
這篇文章主要給大家介紹了關(guān)于uniapp開發(fā)小程序的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
JavaScript實(shí)現(xiàn)滑塊驗(yàn)證解鎖
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)滑塊驗(yàn)證解鎖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01
頁(yè)面載入結(jié)束自動(dòng)調(diào)用js函數(shù)示例
當(dāng)頁(yè)面加載完成后自動(dòng)調(diào)用預(yù)先編好的js函數(shù),在某些特殊情況下還是比較實(shí)用的,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下2013-09-09
JS 對(duì)java返回的json格式的數(shù)據(jù)處理方法
下面小編就為大家?guī)?lái)一篇JS 對(duì)java返回的json格式的數(shù)據(jù)處理方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
JavaScript?split()方法定義及更多實(shí)例
這篇文章主要給大家介紹了關(guān)于JavaScript?split()方法定義及更多實(shí)例的相關(guān)資料,js里的split()方法大家都知道用于將字符串轉(zhuǎn)化為字符串?dāng)?shù)組,文中通過(guò)代碼實(shí)例介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03
JS pushlet XMLAdapter適配器用法案例解析
這篇文章主要介紹了JS pushlet XMLAdapter適配器用法案例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
基于RequireJS和JQuery的模塊化編程日常問(wèn)題解析
本文是小編日常收集整理些有關(guān)RequireJS和JQuery的模塊化編程,感興趣的朋友一起學(xué)習(xí)吧2016-04-04
跟我學(xué)習(xí)javascript的循環(huán)
跟我學(xué)習(xí)javascript的循環(huán),本文不僅針對(duì)javascript循環(huán)進(jìn)行講解,還對(duì)prototype補(bǔ)充了幾點(diǎn)小tips,歡迎大家閱讀。2015-11-11

