javascript的函數(shù)作用域
在一些類似c語(yǔ)言的編程語(yǔ)言中,花括號(hào)內(nèi)的每一段代碼都具有各自的作用域,而且變量在聲明他們的代碼段之外是不可見(jiàn)的,我們稱為塊級(jí)作用域(block scope),而javascript中沒(méi)有塊級(jí)作用域。取而代之的javascript使用的是函數(shù)作用域(function scope):變量在聲明它的函數(shù)體以及這個(gè)函數(shù)體嵌套的任意函數(shù)體內(nèi)都是有定義的。 在如下代碼中,在不同位置定義的i,j和k,他們?cè)偻粋€(gè)作用域內(nèi)都是有定義的
function text(o)
{
var i=0;
alert(typeof o);
if(typeof o == "string")
{
var j=0;
for(var k=0;k<10;k++)
{
alert(k);//輸出0-9
}
alert(k);//輸出10
}
alert(j);//輸出0
}
javascript的函數(shù)作用域指在函數(shù)內(nèi)部聲明的所有的變量在函數(shù)體內(nèi)始終是可見(jiàn)的。有意思的是,這意味著變量在聲明之前甚至已經(jīng)可用。javascript的這個(gè)特性被非正式的稱為聲明提前(hoisting),即javascript的函數(shù)體內(nèi)聲明的所有的變量(不涉及賦值)都被“提前”至函數(shù)體的頂部??匆韵麓a
var global="globas";
function globals()
{
alert(global);//undefined
var global="hello QDao";
alert(global);//hello QDao
}
由于函數(shù)作用域的特性,局部變量在整個(gè)函數(shù)體始終是有定義的,也就是說(shuō)在函數(shù)體內(nèi)部變量遮蓋了同名的全局變量。盡管如此在程序執(zhí)行到var語(yǔ)句的時(shí)候,局部變量才會(huì)被真正的賦值,因此,上述過(guò)程等價(jià)于:將函數(shù)內(nèi)的變量聲明“提前”至函數(shù)體頂部,同事變量初始化留在原來(lái)的位置:
var global="globas";
function globals()
{
var global;
alert(global);//undefined
global="hello QDao";
alert(global);//hello QDao
}
相關(guān)文章
javascript學(xué)習(xí)筆記(九)javascript中的原型(prototype)及原型鏈的繼承方式
在javascript學(xué)習(xí)筆記(八)中,我們主要學(xué)習(xí)了在使用javascript面向?qū)ο缶幊虝r(shí),如何創(chuàng)建對(duì)象及添加對(duì)象的屬性和方法。2011-04-04深入探討JavaScript的最基本部分之執(zhí)行上下文
今天小編就為大家分享一篇關(guān)于深入探討JavaScript的最基本部分之執(zhí)行上下文,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02Mobile Web開(kāi)發(fā)基礎(chǔ)之四--處理手機(jī)設(shè)備的橫豎屏問(wèn)題
這篇文章主要介紹了Mobile Web開(kāi)發(fā)基礎(chǔ)之-—處理手機(jī)設(shè)備的橫豎屏,window.orientation屬性與onorientationchange事件以及media query方式是開(kāi)發(fā)過(guò)程中需要注意到的兩種解決方式,需要的朋友可以參考下2017-08-08在JavaScript中操作時(shí)間之getYear()方法的使用教程
這篇文章主要介紹了在JavaScript中操作時(shí)間之getYear()方法的使用教程,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06JavaScript中使用Math.floor()方法對(duì)數(shù)字取整
這篇文章主要介紹了JavaScript中使用Math.floor()方法對(duì)數(shù)字取整,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06詳解javascript中var與ES6規(guī)范中l(wèi)et、const區(qū)別與用法
es6剛流行那會(huì),我只知道var即將退出歷史舞臺(tái),取而代之的是let和const,卻不知道var有什么缺陷,為什么會(huì)被取代。今天在網(wǎng)上看到一段視頻,解答了我的疑惑2020-01-01JavaScript門(mén)道之標(biāo)準(zhǔn)庫(kù)
標(biāo)準(zhǔn)庫(kù)指的是js的標(biāo)準(zhǔn)內(nèi)置對(duì)象,是js這門(mén)語(yǔ)言本身初始時(shí)提供的在全局范圍的對(duì)象,需要的朋友可以參考下2018-05-05緩動(dòng)函數(shù)requestAnimationFrame 更好的實(shí)現(xiàn)瀏覽器經(jīng)動(dòng)畫(huà)
requestAnimationFrame是什么?一直是我們大家所疑惑的,緩動(dòng)函數(shù)requestAnimationFrame 更好的實(shí)現(xiàn)瀏覽器經(jīng)動(dòng)畫(huà),接下來(lái)將為大家詳細(xì)介紹2012-12-12