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);

图片描述

当我进入断点后,在浏览器里面输入name 打印出dabao 而断点结束后表名函数已经执行完毕了 这时候输入name 输出""
这里面是有什么运行机制么,还是因为函数外无法访问函数内部的变量,我知道结果,只是想了解下原理.

补充个问题,为什么上面两段代码同样的逻辑,得到的结果却不一样?

阅读 2.2k
4 个回答

你疑惑的是 外面打印name为空字符串,因为 name是window属性,你可以在控制台输出 window.name,当然你里面的变量要是换其他的肯定就报错了。

新手上路,请多包涵

函数内部的变量数据局部变量,在函数外是访问不到的

debugger时,console当前作用域是确实是函数内部的局部作用域(也是断点处右键evaluate in console可行的原因),因此可以访问name。debugger通过后,console作用域是全局的,此时name是window.name浏览器自带的属性。如果把name改成其他的,就会报错了。

name top好像都是window自带的 name可以修改 ,但类型固定是string,top好像是不能修改,这两个一般都不能哪来声明变量

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题