JavaScript聲明變量時(shí)為什么要加var關(guān)鍵字
在JavaScript中,var用來(lái)聲明變量,但是這個(gè)語(yǔ)法并不嚴(yán)格要求,很多時(shí)修改,我們可以直接使用一個(gè)變量而不用var聲明它。
var x = "XX";
y ="xxx";
諸如此類(lèi)。這有一個(gè)問(wèn)題,比如說(shuō)在代碼中的某一行,我想使用的一個(gè)已聲明的變量x,結(jié)果由于打字或者拼寫(xiě)錯(cuò)誤,這個(gè)變量被寫(xiě)成y了,結(jié)果相當(dāng)于“隱式”聲明了一個(gè)變量y,在實(shí)際編程過(guò)程中,這種錯(cuò)誤有時(shí)比較難以發(fā)現(xiàn)。
當(dāng)你在當(dāng)前上下文內(nèi)進(jìn)行這種“隱式”聲明時(shí),JavaScript引擎會(huì)先在當(dāng)前上下文中尋找是否之前有聲明此變量,如果沒(méi)有,再到上一級(jí)的上下文中去尋找,如果一直未找到,會(huì)最后在window上聲明這個(gè)變量!
比如:
代碼如下:
window. y = "hello"; function func(){ y = "OH, NO!!!"; } func(); alert(window.y); //#=> display "OH, NO!!!"
當(dāng)上下文中的任意一層有這種“隱式”定義的變量時(shí),那么該層的該變量會(huì)被修改,而不會(huì)在window上生成一個(gè)新的變量。(這種bug也挺討厭的,尤其是封裝的比較復(fù)雜的代碼)
比如:
代碼如下:
var x = "window.x"; function a() { var x = "a's x"; var b = function() { var c = function() { //no var! x = "c's x:"; }; alert("before c run,the b.x:" + x); c(); alert("after c run, the b.x:" + x); }; alert("a.x is:" + x); b(); alert("after b function runed, the a.x is:" + x); }; alert("before a run, window.x:" + x); a(); alert("after a run, window.x:" + x);
這里面有以下幾層:window, func a, func b, func c一直作層級(jí)嵌套。window->a->b->c
window和a中,都有定義變量x,b中未定義該變量,在c中‘隱式'聲明了一個(gè)x,該x最終修改了a變量的值。
牢記,在JavaScript中,聲明變量,一定前面要加var .
- var與Javascript變量隱式聲明
- Javascript var變量隱式聲明方法
- javascript循環(huán)變量注冊(cè)dom事件 之強(qiáng)大的閉包
- 關(guān)于JavaScript中var聲明變量作用域的推斷
- 基于JavaScript 聲明全局變量的三種方式詳解
- 一個(gè)JavaScript變量聲明的知識(shí)點(diǎn)
- 深入理解javascript變量聲明
- JavaScript變量聲明詳解
- javascript定義變量時(shí)加var與不加var的區(qū)別
- javascript定義變量時(shí)帶var與不帶var的區(qū)別分析
- JavaScript判斷變量是否為空的自定義函數(shù)分享
- javascript中局部變量和全局變量的區(qū)別詳解
- JavaScript 變量、作用域及內(nèi)存
- javascript判斷變量是否有值的方法
- JavaScript聲明變量名的語(yǔ)法規(guī)則
- 淺析四種常見(jiàn)的Javascript聲明循環(huán)變量的書(shū)寫(xiě)方式
相關(guān)文章
javascript循環(huán)鏈表之約瑟夫環(huán)的實(shí)現(xiàn)方法
這是一道比較經(jīng)典的循環(huán)鏈表問(wèn)題,在華為上機(jī)筆試中也出現(xiàn)過(guò)。 約瑟夫環(huán)是一個(gè)數(shù)學(xué)的應(yīng)用問(wèn)題,下面這篇文章主要就給大家介紹了javascript循環(huán)鏈表之約瑟夫環(huán)的實(shí)現(xiàn)方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-01-01bootstrapValidator 重新啟用提交按鈕的方法
bootstrapValidator 使用中,由于字段檢查等原因,致使提交按鈕失效。如何重新啟用提交按鈕呢?下面小編給大家介紹下bootstrapValidator 重新啟用提交按鈕的方法,需要的朋友可以參考下2017-02-02微信小程序van-field中的left-icon屬性自定義實(shí)現(xiàn)過(guò)程
在小程序中,我們是用 Vant 組件庫(kù)時(shí),常常會(huì)用到 van-field 輸入框控件,今天我將跟大家分享的是 van-field 輸入框控件中的 left-icon 屬性的自定義怎么實(shí)現(xiàn),感興趣的朋友一起看看吧2023-08-08Js實(shí)現(xiàn)復(fù)選框的全選、全不選反選功能代碼實(shí)例
這篇文章主要介紹了Js實(shí)現(xiàn)復(fù)選框的全選、全不選和反選,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02被jQuery折騰得半死,揭秘為何jQuery為何在IE/Firefox下均無(wú)法使用
某學(xué)員前日實(shí)施一個(gè)Web項(xiàng)目實(shí)施發(fā)生了悲劇,找到我求解決,把我也折騰個(gè)半死。2010-01-01js實(shí)現(xiàn)收縮菜單效果實(shí)例代碼
這篇文章介紹了js實(shí)現(xiàn)收縮菜單效果實(shí)例代碼,有需要的朋友可以參考一下2013-10-10