为何JavaScript函数内var声明的变量无法被其他函数访问?
为什么var声明的变量无法跨函数访问?
你的代码里抛出Uncaught ReferenceError: varG is not defined的核心原因是:你用var在myOtherFunction内部声明的varG不是全局变量,而是该函数的局部变量。
关键知识点:var的作用域规则
var的作用域是函数作用域——也就是说,在函数内部用var声明的变量,只能在这个函数(以及它内部嵌套的函数)的范围内被访问,其他同级函数完全看不到这个变量。myFunction和myOtherFunction是两个独立的函数,myFunction自然无法访问myOtherFunction里的局部变量varG。
如何让变量能被跨函数访问?
如果你需要varG能被myFunction访问,有两种常见方式:
- 在全局作用域声明变量
把varG的声明放在所有函数外面,这样它就成为全局变量,所有函数都能访问:
var varG; // 全局作用域声明变量 function myFunction(){ let var1 = varG console.log(var1) } function myOtherFunction(){ varG = document.all // 直接赋值全局变量 myFunction() } myOtherFunction()
- 将变量挂载到全局对象(浏览器环境下是window)
在myOtherFunction里把变量赋值给window对象,这样它就成为全局属性,其他函数可以通过window访问:
function myFunction(){ let var1 = window.varG console.log(var1) } function myOtherFunction(){ window.varG = document.all // 挂载到全局对象 myFunction() } myOtherFunction()
纠正误解
别误以为只要用var声明就是全局变量——只有在所有函数外部用var声明的变量才是全局变量,函数内部的var声明的都是局部变量,作用域仅限当前函数。
内容的提问来源于stack exchange,提问作者Manthe fraiche
相关产品推荐
相关产品推荐

