天天看點

php js函數作用域,javascript函數作用域學習示例(js作用域)_基礎知識

在一些類似c語言的程式設計語言中,花括号内的每一段代碼都具有各自的作用域,而且變量在聲明他們的代碼段之外是不可見的,我們稱為塊級作用域(block scope),而javascript中沒有塊級作用域。取而代之的javascript使用的是函數作用域(function scope):變量在聲明它的函數體以及這個函數體嵌套的任意函數體内都是有定義的。 在如下代碼中,在不同位置定義的i,j和k,他們再同一個作用域内都是有定義的

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的函數作用域指在函數内部聲明的所有的變量在函數體内始終是可見的。有意思的是,這意味着變量在聲明之前甚至已經可用。javascript的這個特性被非正式的稱為聲明提前(hoisting),即javascript的函數體内聲明的所有的變量(不涉及指派)都被“提前”至函數體的頂部。看以下代碼

var global="globas";

function globals()

{

alert(global);//undefined

var global="hello QDao";

alert(global);//hello QDao

}

由于函數作用域的特性,局部變量在整個函數體始終是有定義的,也就是說在函數體内部變量遮蓋了同名的全局變量。盡管如此在程式執行到var語句的時候,局部變量才會被真正的指派,是以,上述過程等價于:将函數内的變量聲明“提前”至函數體頂部,同僚變量初始化留在原來的位置:

var global="globas";

function globals()

{

var global;

alert(global);//undefined

global="hello QDao";

alert(global);//hello QDao

}

本文原創釋出php中文網,轉載請注明出處,感謝您的尊重!