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