javascript函數(shù)作用域?qū)W習(xí)示例(js作用域)
在一些類似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 window.location對(duì)象
這篇文章主要介紹了JavaScript window.location對(duì)象的相關(guān)資料,需要的朋友可以參考下2014-11-11
javascript中substr,substring,slice.splice的區(qū)別說(shuō)明
某些情況下,負(fù)數(shù)的參數(shù)不識(shí)別.所以盡量不要用負(fù)數(shù)作參數(shù).免得瀏覽器不兼容,造成程序的出錯(cuò).2010-11-11
JS嚴(yán)格模式知識(shí)點(diǎn)總結(jié)
本篇文章給大家整理了JS嚴(yán)格模式下的相關(guān)知識(shí)點(diǎn)以及代碼實(shí)例分享,感興趣的跟著小編一起學(xué)習(xí)下吧。2018-02-02
JavaScript常用字符串與數(shù)組擴(kuò)展函數(shù)小結(jié)
這篇文章主要介紹了一些JavaScript常用字符串與數(shù)組擴(kuò)展函數(shù),整理了一些簡(jiǎn)單而使用率又高的操作String與Array的函數(shù),需要的朋友可以參考下2016-04-04
WEB頁(yè)子窗口(showModalDialog和showModelessDialog)使用說(shuō)明
WEB頁(yè)子窗口(showModalDialog和showModelessDialog)使用說(shuō)明,大家可以看下。2009-10-10
CentOS環(huán)境中MySQL修改root密碼方法
這篇文章給大家講述了如何遵循12條方法來(lái)寫出高質(zhì)量的JS代碼的經(jīng)驗(yàn),有這方便需要的朋友參考下吧。2018-01-01

