鍍金池/ 問答/HTML/ js 變量作用域

js 變量作用域

 function test(){
    var name = 'dabao';
    console.log(name);
 }
test();
console.log(name);


 function demo(){
    var age= 'dabao';
    console.log(age);
 }
demo();
console.log(age);

圖片描述

當(dāng)我進(jìn)入斷點(diǎn)后,在瀏覽器里面輸入name 打印出dabao 而斷點(diǎn)結(jié)束后表名函數(shù)已經(jīng)執(zhí)行完畢了 這時(shí)候輸入name 輸出""
這里面是有什么運(yùn)行機(jī)制么,還是因?yàn)楹瘮?shù)外無法訪問函數(shù)內(nèi)部的變量,我知道結(jié)果,只是想了解下原理.

補(bǔ)充個(gè)問題,為什么上面兩段代碼同樣的邏輯,得到的結(jié)果卻不一樣?

回答
編輯回答
不舍棄

debugger時(shí),console當(dāng)前作用域是確實(shí)是函數(shù)內(nèi)部的局部作用域(也是斷點(diǎn)處右鍵evaluate in console可行的原因),因此可以訪問name。debugger通過后,console作用域是全局的,此時(shí)name是window.name瀏覽器自帶的屬性。如果把name改成其他的,就會(huì)報(bào)錯(cuò)了。

2017年9月11日 04:06
編輯回答
深記你

name top好像都是window自帶的 name可以修改 ,但類型固定是string,top好像是不能修改,這兩個(gè)一般都不能哪來聲明變量

2017年8月20日 19:55
編輯回答
鐧簞噯

你疑惑的是 外面打印name為空字符串,因?yàn)?name是window屬性,你可以在控制臺(tái)輸出 window.name,當(dāng)然你里面的變量要是換其他的肯定就報(bào)錯(cuò)了。

2017年1月23日 23:08
編輯回答
做不到

函數(shù)內(nèi)部的變量數(shù)據(jù)局部變量,在函數(shù)外是訪問不到的

2018年9月2日 13:25