javascript中局部变量和全局变量同名的疑惑,有具体代码,请小伙伴赐教!
直接po代码和截图
为什么打印出来的是江西省于都县
谁能解释一下?
<script type="text/javascript">
var address = "江西省于都县";
function f6(){
console.log(address);
}
function f7(){
var address = "江西省赣州市于都县";
f6();
}
f7(); //结果为江西省于都县
</script>
在f7函数中调用了f6函数,那应该相当于如下代码啊
var address = "江西省于都县";
function f7(){
var address = "江西省赣州市于都县";
//f6(); //f6函数应该相当于下面这一行代码啊
console.log(address);
}
你的f6 和f7 都是局部的 如果你没有定义全局变量adress 然后直接 调用f7 ;f6会报错 adress 未定义;两个局部的变量是要通过参数传递 并不是在f7定义了一个adress
f6 就能拿到的 ,拿不到就要看 自身的块级链有没有 adress 没有就去方法的arguments参数里 找 在没有就要看全局
f6调用的时候需要打印address这个变量,在f6函数作用域内部并没有这个变量,所以会往f6更上一层作用域查找,即全局作用域,找到了address,值为江苏省于都县
跟在那调用没关系,是看你函数在哪调用的吧
f6函数属于全局函数,所有对象都能调用的并使用。f9函数属于f8()局部函数,故f8函数输出变量会网上找f9函数的变量名,如果想将f6函数像f9函数那样使用的话,将f6函数改为立即执行函数修改作用域应该就可以了吧