摘要:自由變量如果在某個作用域中使用了變量,而變量并未在該作用域中聲明在其它作用域中聲明了,則該變量即為自由變量。換言之,此處最終執行的函數是,而自由變量是,因此要到創建的作用域中去找的值。
自由變量:如果在某個作用域中使用了變量“a”,而變量“a”并未在該作用域中聲明(在其它作用域中聲明了),則該變量“a”即為自由變量。
var a = 1; function fn() { var b = 2; console.log( a + b); //變量a即為一個自由變量 }
上述代碼中,取b的值就直接可以在fn作用域中取,因為b就是在這里定義的。而取x的值時,就需要到另一個作用域中取。到哪個作用域中取呢?
有人說,要到父作用域中取,其實有時候這種解釋會產生歧義。例如:
var a = 1; function fn() { console.log(a); } function show(f) { var a = 2; (function () { f(); //1,而不是2 })(); } show(fn);
上述代碼的執行結果說明“要到父作用域中取”這句話并不準確,更貼切的說法是:要到創建這個被執行函數(此處為fn)的那個作用域(此處為全局作用域,因為fn是在全局作用域中創建的)中取值 是“創建”,而不是“調用”,切記切記——其實這就是所謂的“靜態作用域”。換言之,此處最終執行的函數是fn,而自由變量是a,因此要到創建fn的作用域中去找a的值。
存在這樣的可能,在創建fn的作用域中并未找到自由變量a,此時怎么辦呢?那就再到該作用域的上一級作用域中尋找,如若還沒有,就繼續向上找,直至找到全局作用域,若依然未找到,就會報“a is not defined!”。能夠沿著作用域一級級向上尋找的機制就稱為“作用域鏈”。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91724.html
摘要:使用上一篇文章的例子來說明下自由變量進階期深入淺出圖解作用域鏈和閉包訪問外部的今天是今天是其中既不是參數,也不是局部變量,所以是自由變量。 (關注福利,關注本公眾號回復[資料]領取優質前端視頻,包括Vue、React、Node源碼和實戰、面試指導) 本周正式開始前端進階的第二期,本周的主題是作用域閉包,今天是第7天。 本計劃一共28期,每期重點攻克一個面試重難點,如果你還不了解本進階計...
摘要:一概要紅寶書對于閉包的定義閉包就是有權訪問另外一個函數作用域中變量的函數。湯姆大叔在關于閉包對的文章的定義。解決辦法改成閉包,方法就是返回一個函數,并且訪問變量循環結束后的全局執行上下文沒有變化。 一、概要 紅寶書(P178)對于閉包的定義:閉包就是有權訪問另外一個函數作用域中變量的函數。 MDN,對于閉包的定義:閉包就是指能夠訪問自由變量的函數。 那么什么是自由變量?自由變量就是在函...
摘要:閉包引起的內存泄漏總結從理論的角度將由于作用域鏈的特性中所有函數都是閉包但是從應用的角度來說只有當函數以返回值返回或者當函數以參數形式使用或者當函數中自由變量在函數外被引用時才能成為明確意義上的閉包。 文章同步到github js的閉包概念幾乎是任何面試官都會問的問題,最近把閉包這塊的概念梳理了一下,記錄成以下文章。 什么是閉包 我先列出一些官方及經典書籍等書中給出的概念,這些概念雖然...
前言 JavaScript中有一個被稱為作用域(Scope)的特性。雖然對于許多新手開發者來說,作用域的概念并不是很容易理解,本文我會盡我所能用最簡單的方式來解釋作用域和作用域鏈,希望大家有所收獲! 想閱讀更多優質文章請猛戳GitHub博客 作用域(Scope) 1.什么是作用域 作用域是在運行時代碼中的某些特定部分中變量,函數和對象的可訪問性。換句話說,作用域決定了代碼區塊中變量和其他資源的可見...
前言 JavaScript中有一個被稱為作用域(Scope)的特性。雖然對于許多新手開發者來說,作用域的概念并不是很容易理解,本文我會盡我所能用最簡單的方式來解釋作用域和作用域鏈,希望大家有所收獲! 想閱讀更多優質文章請猛戳GitHub博客 作用域(Scope) 1.什么是作用域 作用域是在運行時代碼中的某些特定部分中變量,函數和對象的可訪問性。換句話說,作用域決定了代碼區塊中變量和其他資源的可見...
閱讀 1735·2023-04-25 19:37
閱讀 1298·2021-11-16 11:45
閱讀 2802·2021-10-18 13:30
閱讀 2763·2021-09-29 09:34
閱讀 1616·2019-08-30 15:55
閱讀 3110·2019-08-30 11:10
閱讀 1833·2019-08-29 16:52
閱讀 994·2019-08-29 13:18