国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一篇文章帶你了解js作用域

xiguadada / 648人閱讀

摘要:函數(shù)所能訪問的作用域鏈為,在執(zhí)行函數(shù)時(shí),的值已經(jīng)被修改成了。在執(zhí)行一個(gè)函數(shù)時(shí),如果我們需要查找某個(gè)變量值,那么會(huì)去這個(gè)函數(shù)被定義時(shí)所在的作用域鏈中查找,一旦找到需要的變量,就會(huì)停止向上查找。參考文章題解作用域

走在前端的大道上

本篇將自己讀過的相關(guān) javascript作用域 文章中,對自己有啟發(fā)的章節(jié)片段總結(jié)在這(會(huì)對原文進(jìn)行刪改),會(huì)不斷豐富提煉總結(jié)更新。

說說你對JavaScript作用域的理解?

JavaScript是門動(dòng)態(tài)語言,跟Java不一樣,JavaScript可以隨意定義全局變量和局部變量,變量會(huì)在該作用域下提升,而且JavaScript沒有塊級(jí)作用域。全局變量就是定義在全局的變量了,局部變量是定義在函數(shù)里的變量,每一個(gè)函數(shù)都是一個(gè)作用域,當(dāng)函數(shù)執(zhí)行時(shí)會(huì)優(yōu)先查找當(dāng)前作用域,然后逐級(jí)向上。定義在 if 和 for 語句里的變量,在大括號(hào)外面也能訪問到,這就是沒有塊級(jí)作用域。

JavaScript是靜態(tài)作用域,在對變量進(jìn)行查詢時(shí),變量值由函數(shù)定義時(shí)的位置決定,和執(zhí)行時(shí)的所處的作用域無關(guān)。

知道ES6的童鞋可能還會(huì)指出 JavaScript已經(jīng)有塊級(jí)作用域了,而且用 let 和 const 定義的變量不會(huì)提升。

來感受一下

第一題

var a = 1;
function fn() {
  console.log("1:" + a);

  var a = 2;
  bar()
  console.log("2:" + a)
}

function bar() {
  console.log("3:" + a)
}

fn()

第一個(gè) a 打印的值是 1:undefined 而不是 1。因?yàn)槲覀冊?fn() 中定義了變量 a,用 var 定義的變量會(huì)在當(dāng)前作用域提升,但是并不會(huì)攜帶賦給變量的值一起提升。

第二個(gè) a 打印的值是 3:1 而不是 2。因?yàn)楹瘮?shù) bar 是定義在全局作用域中的,所以作用域鏈?zhǔn)?bar -> global,bar 里面沒有定義a,所以就會(huì)順著作用域鏈向上找,然后在 global 中找到了 a。

第三個(gè) a 打印的值是 2:2。這句話所在的作用域鏈?zhǔn)?fn -> global,執(zhí)行 console.log("2:" + a) 會(huì)首先在 fn 作用域里查找 a,找到有 a,并且值為2,所以結(jié)果就是2。
答案:

// 第一題正確答案
1:undefined
3:1
2:2

第二題

var a = 1;
function fn() {
  console.log("1:" + a);
  a = 2
}

a = 3;
function bar() {
  console.log("2:" + a);
}

fn();
bar();

第一個(gè) a 打印的值是 1:3,既不是 undefined 也不是 1。首先, fn 中的 a = 2 是給變量 a 賦值,并沒有定義變量。然后,執(zhí)行函數(shù) fn,在查找變量 a 時(shí),此時(shí)查找的變量就是全局變量 a,不過此時(shí) a 的值為3。

第二個(gè) a 打印的值是 2:2。函數(shù) bar 所能訪問的作用域鏈為 bar->global,在執(zhí)行函數(shù) bar 時(shí),a 的值已經(jīng)被修改成了 2。
答案:

// 第二題正確答案
1:3
2:2
知識(shí)點(diǎn):
在JavaScript中,通過 let 和 const 定義的變量具有塊級(jí)作用域的特性。

通過 var 定義的變量會(huì)在它自身的作用域中進(jìn)行提升,而 let 和 const 定義的變量不會(huì)。

每個(gè)JavaScript程序都具有一個(gè)全局作用域,每創(chuàng)建一個(gè)函數(shù)都會(huì)創(chuàng)建一個(gè)作用域。

在創(chuàng)建函數(shù)時(shí),將這些函數(shù)進(jìn)行嵌套,它們的作用域也會(huì)嵌套,形成作用域鏈,子作用域可以訪問父作用域,但是父作用域不能訪問子作用域。

在執(zhí)行一個(gè)函數(shù)時(shí),如果我們需要查找某個(gè)變量值,那么會(huì)去這個(gè)函數(shù)被 定義 時(shí)所在的作用域鏈中查找,一旦找到需要的變量,就會(huì)停止向上查找。

“變量的值由函數(shù)定義時(shí)的位置決定”這句話有歧義,準(zhǔn)確說是查找變量時(shí),是去定義這個(gè)函數(shù)時(shí)所在的作用域鏈查找。

參考文章:
1.題解JavaScript作用域

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/90635.html

相關(guān)文章

  • 【進(jìn)階1-4期】JavaScript深入之帶你走進(jìn)內(nèi)存機(jī)制

    摘要:引擎對堆內(nèi)存中的對象進(jìn)行分代管理新生代存活周期較短的對象,如臨時(shí)變量字符串等。內(nèi)存泄漏對于持續(xù)運(yùn)行的服務(wù)進(jìn)程,必須及時(shí)釋放不再用到的內(nèi)存。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開始前端進(jìn)階的第一期,本周的主題是調(diào)用堆棧,今天是第4天。 本計(jì)劃一共28期,每期重點(diǎn)攻克一個(gè)面試重難點(diǎn),如果你還不了解本進(jìn)階計(jì)劃...

    不知名網(wǎng)友 評(píng)論0 收藏0
  • 帶你了解什么是JavaScript 函數(shù)式編程?

    摘要:前言函數(shù)式編程在前端已經(jīng)成為了一個(gè)非常熱門的話題。整個(gè)過程就是體現(xiàn)了函數(shù)式編程的核心思想通過函數(shù)對數(shù)據(jù)進(jìn)行轉(zhuǎn)換。高階函數(shù)函數(shù)式編程傾向于復(fù)用一組通用的函數(shù)功能來處理數(shù)據(jù),它通過使用高階函數(shù)來實(shí)現(xiàn)。 前言 函數(shù)式編程在前端已經(jīng)成為了一個(gè)非常熱門的話題。在最近幾年里,我們看到非常多的應(yīng)用程序代碼庫里大量使用著函數(shù)式編程思想。 本文將略去那些晦澀難懂的概念介紹,重點(diǎn)展示在 JavaScrip...

    acrazing 評(píng)論0 收藏0
  • JavaScript - 收藏集 - 掘金

    摘要:插件開發(fā)前端掘金作者原文地址譯者插件是為應(yīng)用添加全局功能的一種強(qiáng)大而且簡單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內(nèi)優(yōu)雅的實(shí)現(xiàn)文件分片斷點(diǎn)續(xù)傳。 Vue.js 插件開發(fā) - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應(yīng)用添加全局功能的一種強(qiáng)大而且簡單的方式。插....

    izhuhaodev 評(píng)論0 收藏0
  • 【進(jìn)階2-1期】深入淺出圖解作用鏈和閉包

    摘要:本期推薦文章從作用域鏈談閉包,由于微信不能訪問外鏈,點(diǎn)擊閱讀原文就可以啦。推薦理由這是一篇譯文,深入淺出圖解作用域鏈,一步步深入介紹閉包。作用域鏈的頂端是全局對象,在全局環(huán)境中定義的變量就會(huì)綁定到全局對象中。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周開始前端進(jìn)階的第二期,本周的主題是作用域閉包,今天是第6天。 本...

    levius 評(píng)論0 收藏0
  • javascript知識(shí)點(diǎn)

    摘要:模塊化是隨著前端技術(shù)的發(fā)展,前端代碼爆炸式增長后,工程化所采取的必然措施。目前模塊化的思想分為和。特別指出,事件不等同于異步,回調(diào)也不等同于異步。將會(huì)討論安全的類型檢測惰性載入函數(shù)凍結(jié)對象定時(shí)器等話題。 Vue.js 前后端同構(gòu)方案之準(zhǔn)備篇——代碼優(yōu)化 目前 Vue.js 的火爆不亞于當(dāng)初的 React,本人對寫代碼有潔癖,代碼也是藝術(shù)。此篇是準(zhǔn)備篇,工欲善其事,必先利其器。我們先在代...

    Karrdy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<