摘要:怎么理解這句話呢也就是說一個(gè)函數(shù)離開了創(chuàng)建時(shí)的作用域,但是其還是會(huì)和這個(gè)作用域以及這個(gè)函數(shù)外部的作用域相關(guān)聯(lián),也就是說變量依舊是那個(gè)變量以這個(gè)題目為參照,那么結(jié)果就很明了了。
var a = 2;
var func = (function(){
var a = 3; return function(){ a++; console.log(a); }
})();
func();
func();
1.涉及的知識(shí)點(diǎn):
(1)JS變量的作用域
(2)閉包
2.變量的作用域,通俗來說就是變量所能起到作用的范圍,也就是變量能被訪問到的范圍。
對(duì)于變量的作用域的理解,有一下幾點(diǎn)需要了解的:
(1)變量的作用域不是“塊級(jí)”,而是以“函數(shù)”為作用域
這個(gè)所說的的“塊級(jí)”,指的是距離“代碼”最近的代碼塊。比如舉個(gè)C#的例子: public void Param() { var a = 1; if(a==1){ var b = c; } } 變量a的作用域就是 Param()這個(gè)代碼快,而變量b的作用域的作用域就是if所表示的代碼塊。 來看個(gè)JavaScript的例子: function param () { { var a = "liyunhua" } console.log(a); // 輸出 liyunhua } console.log(a) // error 變量a在params()中都是可以被訪問的,而出了param()的范圍就會(huì)報(bào)錯(cuò)。
(2)變量的覆蓋:“一個(gè)作用域中存在一個(gè)與外層作用域的同名變量,那么在內(nèi)部作用域以及其內(nèi)部的所有的作用域中都訪問不到外面的變量”--摘自《深入理解JavaScript》
這句話還是比較好理解的。這里就不做解釋了。 理解了上面的兩點(diǎn),那么在立即執(zhí)行函數(shù)表達(dá)式(IIFE)中,a的初始值就是3,并且不會(huì)影響到外部作用域變量a的值。執(zhí)行函數(shù)(IIFE)中,a的初始值就是3,并且不會(huì)影響到外部作用域變量a的值。 3.閉包 閉包的東西太多,這里就以題論題,不會(huì)過多地講述閉包的知識(shí)點(diǎn)。有興趣的朋友,可以去這個(gè)鏈接了解 (https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures)。 這里說閉包的一個(gè)作用:使函數(shù)可以維持其創(chuàng)建時(shí)所在作用域。 怎么理解這句話呢? 也就是說一個(gè)函數(shù)離開了“創(chuàng)建時(shí)的作用域”,但是其還是會(huì)和這個(gè)作用域以及這個(gè)函數(shù)外部的作用域相關(guān)聯(lián),也就是說“變量”依舊是那個(gè)“變量” 以這個(gè)題目為參照,那么結(jié)果就很明了了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/98470.html
摘要:這篇文章總結(jié)下之前看的文章和自己在工作中遇到的坑,純手寫的,有什么寫的不對(duì)的請(qǐng)多多提出修正哈變量提升何為變量提升里面的變量在聲明之前就可以使用,因?yàn)樵撀暶饕呀?jīng)被提升至該作用域函數(shù)或全局的頂部直接上代碼和都會(huì)變量提升優(yōu)先級(jí)上面可理解為函數(shù)這時(shí) 這篇文章總結(jié)下之前看的文章和自己在工作中遇到的坑,純手寫的,有什么寫的不對(duì)的請(qǐng)多多提出修正哈 變量提升 何為變量提升?js里面的變量在聲明之前就可...
摘要:閉包能用來實(shí)現(xiàn)私有化和創(chuàng)建工廠函數(shù)等作用。關(guān)于閉包的常見面試題是這樣的寫一個(gè)函數(shù),循環(huán)一個(gè)整數(shù)數(shù)組,延遲秒打印這個(gè)數(shù)組中每個(gè)元素的索引。 文章來源:http://mp.weixin.qq.com/s/vs0... 前言 在公眾號(hào)上看到了這篇文章,覺得很有用,有助于理解JS學(xué)習(xí)中的一些重點(diǎn)難點(diǎn)。決定把它整理下發(fā)布出來。該文章主要介紹了JS中的三個(gè)問題。在以后的幾篇文章里,我會(huì)詳細(xì)介紹這三...
摘要:前言最近在學(xué)前幾天看到兩道題剛開始看懵懵懂懂這幾天通過各種查資料慢慢的理解頓悟了對(duì)匿名函數(shù)閉包立即執(zhí)行函數(shù)的理解也更深了一點(diǎn)在此分享給大家我的理解與總結(jié)希望能幫助大家理解因?yàn)檫@篇文章是我用心總結(jié)的查閱了很多的資料所以總結(jié)的比較細(xì)篇幅較長如果 前言 最近在學(xué)JS,前幾天看到兩道題,剛開始看懵懵懂懂,這幾天通過各種查資料,慢慢的理解,頓悟了,對(duì)匿名函數(shù),閉包,立即執(zhí)行函數(shù)的理解也更深了一點(diǎn)...
摘要:線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口順序執(zhí)行序列和程序的出口。從邏輯角度來看,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。 showImg(https://segmentfault.com/img/bVbv2GE?w=900&h=400); 前言 本文講解 56 道 JavaScript...
摘要:四這個(gè)題目比較簡單即函數(shù)聲明和變量聲明的關(guān)系和影響,遇到同名的函數(shù)聲明,不會(huì)重新定義五關(guān)于這個(gè)題目,的規(guī)范有解釋的。屬性的值是對(duì)象關(guān)于對(duì)象的具體定義,看這里對(duì)象六這個(gè)題目可以說是最簡單的,也是最詭異的關(guān)于這個(gè)題目,我們先來了解個(gè)概念。 廢話不多說,直接看題目,先不要急著看答案 先自己思考,收獲更多 (長期補(bǔ)倉); 一 var out = 25, inner = { ...
閱讀 2888·2021-11-22 13:54
閱讀 3537·2021-11-16 11:44
閱讀 1378·2021-09-07 10:19
閱讀 1479·2019-08-29 17:30
閱讀 3204·2019-08-29 11:33
閱讀 3550·2019-08-26 12:18
閱讀 2893·2019-08-26 11:53
閱讀 1344·2019-08-26 10:47