摘要:請注意是創(chuàng)建一個全局對象的屬性,而不是聲明了一個全局變量。由于變量聲明自帶不可刪除屬性,比較跟,前者是變量聲明,帶不可刪除屬性,因此無法被刪除后者為全局變量的一個屬性,因此可以從全局變量中刪除。下期預(yù)告前端面試你所不知道系列偽類和偽元素
寫在開始
又到了一年的伊始,很多人可能因?yàn)楦鞣N原因想換一份工作,而找工作難免遇到各種各樣頭痛的面試題,于是我打算寫一個系列,關(guān)于面試中最常見或者前端一些基礎(chǔ)但又不是很深入了解的知識,供大家參考。
先來道開胃菜 var還是不var?使用var定義
var a = "hello World" function bb(){ var a = "hello Tom"; console.log(a); } bb() console.log(a);
不使用var定義
var e = "hello world"; function cc(){ e = "hello Tom"; console.log(e); } cc() console.log(e)
猜猜會執(zhí)行什么?
其實(shí)很簡單,使用var先后打印// "hello Tom" // "hello world",
不使用var先后打印// "hello Tom" // "hello Tom"。
大家都知道Javascript聲明變量是通過關(guān)鍵字var。使用var關(guān)鍵字是在當(dāng)前域中聲明變量,如果在方法中聲明,則為局部變量(local varibble);如果在全局域中聲明,則為全局變量。
但在非嚴(yán)格模式下,不通過var直接聲明變量,則是全局變量,好像也不會報錯,例如a = 1 console.log(a) // 1,但這樣真的沒問題嗎?那么執(zhí)行a = 1; 發(fā)生了什么呢?
它會嘗試在當(dāng)前作用域鏈(如果是在方法中,則當(dāng)前作用域鏈代表全局和方法局部作用域)中解析a;如果在任何當(dāng)前作用域找到a;則會對a屬性賦值;如果沒有找到a,它會在全局對象(當(dāng)前作用域最頂層,如window對象)中創(chuàng)造a屬性并賦值。
請注意!??!是創(chuàng)建一個全局對象的屬性,而不是聲明了一個全局變量。
或許你可能不是很明白‘聲明變量’和‘創(chuàng)建對象屬性’有什么區(qū)別。但事實(shí)上,Javascript 的變量聲明、創(chuàng)建屬性都有一定的標(biāo)志去聲明他們的屬性如:只讀(ReadOnly)不可枚舉(DontEnum)不可刪除(DontDelete)等等。
由于‘變量聲明’自帶不可刪除屬性,比較var a = 1 跟 a = 1,前者是變量聲明,帶不可刪除屬性,因此無法被刪除;后者為全局變量的一個屬性,因此可以從全局變量中刪除。
var a = 1 b = 2 console.log(delete a) // false console.log(delete b) // true變量提升
使用var定義:
function hh(){ console.log(a); var a = "hello world"; } hh() //undefined
不使用var定義:
function hh(){ console.log(a); a = "hello world"; } hh() // "a is not defined"
還有一點(diǎn)很容易被忽略,在ES5的"use strict"模式下,如果變量沒有使用var定義,就會報錯。
這也是一個差別。
1.在函數(shù)作用域內(nèi) 加var定義的變量是局部變量,不加var定義的就成了全局變量。
2.在全局作用域下,使用var定義的變量不可以delete,沒有var 定義的變量可以delete。
3.使用var 定義變量還會提升變量聲明。
4.在ES5的"use strict"模式下,如果變量沒有使用var定義,就會報錯。
寫在最后由于個人能力有限,如果文中出現(xiàn)任何錯誤,歡迎各位大神提出批評和建議,這是鄙人首次發(fā)表技術(shù)性文章,希望大家多多支持。
下期預(yù)告:前端面試你所不知道系列--偽類和偽元素
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107250.html
摘要:摘要你所不知道的系列。允許你寫入縮寫代碼并返回的相應(yīng)標(biāo)記,目前已經(jīng)內(nèi)置,所以不用配置了。自從年雙十一正式上線,累計處理了億錯誤事件,付費(fèi)客戶有金山軟件百姓網(wǎng)等眾多品牌企業(yè)。摘要: 你所不知道的系列。 原文:提高 JavaScript 開發(fā)效率的高級 VSCode 擴(kuò)展之二! 作者:前端小智 Fundebug經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有。 作為一名業(yè)余愛好者、專業(yè)人員,甚至是每月只有一次編...
摘要:用專業(yè)的話來講設(shè)計模式是一套被反復(fù)使用多數(shù)人知曉的經(jīng)過分類編目的代碼設(shè)計經(jīng)驗(yàn)的總結(jié)創(chuàng)建型模式,共五種工廠方法模式抽象工廠模式單例模式建造者模式原型模式。工廠方法模式的擴(kuò)展性非常優(yōu)秀。工廠方法模式是典型的解耦框架。 前言 最近一直在Java方向奮斗《終于,我還是下決心學(xué)Java后臺了》,今天抽空開始學(xué)習(xí)Java的設(shè)計模式了。計劃有時間就去學(xué)習(xí),你這么有時間,還不來一起上車嗎? 之所以要學(xué)...
摘要:總結(jié)動態(tài)代理的相關(guān)原理已經(jīng)講解完畢,接下來讓我們回答以下幾個思考題。 【干貨點(diǎn)】 此處是【好好面試】系列文的第12篇文章。文章目標(biāo)主要是通過原理剖析的方式解答Aop動態(tài)代理的面試熱點(diǎn)問題,通過一步步提出問題和了解原理的方式,我們可以記得更深更牢,進(jìn)而解決被面試官卡住喉嚨的情況。問題如下 SpringBoot默認(rèn)代理類型是什么 為什么不用靜態(tài)代理 JDK動態(tài)代理原理 CGLIB動態(tài)代理...
摘要:背景狀態(tài)碼有哪些,這也是一個很高頻的面試問題。總結(jié)僅僅三個狀態(tài)碼,都可以牽涉到如此豐富的知識,對于狀態(tài)碼,我們不能只是片面的去背誦狀態(tài)碼及對應(yīng)的含義,要去主動挖掘,深入,借助狀態(tài)碼來建立自己的網(wǎng)絡(luò)體系。 背景 http狀態(tài)碼有哪些,這也是一個很高頻的面試問題。一般大家都知道404頁面不存在,500服務(wù)器錯誤,301重定向,302臨時重定向,200ok,401未授權(quán)啥的。 如果只是簡單的...
閱讀 1398·2021-09-02 10:19
閱讀 1123·2019-08-26 13:25
閱讀 2134·2019-08-26 11:37
閱讀 2448·2019-08-26 10:18
閱讀 2703·2019-08-23 16:43
閱讀 3077·2019-08-23 16:25
閱讀 802·2019-08-23 15:53
閱讀 3330·2019-08-23 15:11