带var和不带var的javascript变量之间的区别? [复制]
Posted
技术标签:
【中文标题】带var和不带var的javascript变量之间的区别? [复制]【英文标题】:Difference between javascript variable with var and without var? [duplicate] 【发布时间】:2014-03-13 08:37:49 【问题描述】:下面给出的两个语句有什么区别?
var temp = 10;
temp = 10;
【问题讨论】:
它是一个范围前缀。 var 生成局部变量,不生成全局变量或严格下的错误。 @dandavis -- 如果我将在函数内部使用“ temp = 10; ”,那么它将是全局的还是该函数的本地? @DixitSingla 显然,全球:function f()temp=1; f(); temp; // 1
。
【参考方案1】:
如果你在函数中声明了一个带有“var”的变量,它将是你的函数的本地变量,否则 js 引擎将开始在本地范围(函数)中寻找变量,如果没有找到它,那么它将是自动在全局空间中声明
来自此链接:https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-3/variable-scope
当你声明一个全局 JavaScript 变量时,你实际上是什么 做的是定义全局对象(The Global Object)的一个属性。 如果使用 var 声明变量,则创建的属性 是不可配置的(请参阅属性属性),这意味着它 不能用 delete 操作符删除。
那么,如果你在一个函数内或在全局空间(在任何函数之外)做:
温度=10;
你可以在任何地方使用它:
console.log(window.temp);
只是一堆嵌套函数(阅读从内部开始的代码 cmets 以便更好地理解):
//lots of stuff here but not a "var temp=9"
//I couldn't find "x" I will make it global as a property of the globalObject
function myFunction() //is x here ? no ? then look outside
(function() //is x here ? no ? then look outside
(function() //is x here ? no ? then look outside
x=5; //declaring x without var, I will look for it
());
());
myFunction();
console.log(window.x); //As x was declared a property from the global object I can do this.
如果您在函数中使用var
声明它,则不能使用window.temp
(变量不是hoisted),如果您在函数中使用该变量将是“本地”到您的功能(不会被提升),即:
foo = 1;
function test()
var foo = 'bar';
test();
alert(foo);
// Result: 1
Source here from above sample and others here
还要注意,在全局空间(外部)中使用“var”,所有函数都会创建一个全局变量(窗口对象中的属性) 顺便说一句,始终使用 var。
【讨论】:
那为什么是jsfiddle.net/arunpjohny/U7Kg5/1 此代码将在 9 中输出 (console.log('in', temp)) (console.log('out', temp)) 会说 temp 未定义它永远不会执行“函数 x " temp 在 anom 函数中声明,它在内部工作,因为你是自我执行的函数,外部不能工作,因为没有声明它,函数 x() 永远不会被调用,然后 temp没有修改,如果你这样做 x() temp 将为第一个 console.log 的 10,因为“find” temp 在前一个范围内(来自 anom 函数)【参考方案2】:当您在全局范围内定义变量时,您可以在任何地方访问它。如果你用 var 重新定义它,那么这个变量只有在当前范围内才有这个值。
在全局范围内定义一个变量:
var a = 1;
现在您可以像这样通过函数的作用域访问它:
function print()
console.log(window.a); // 1
window.a = 5;
anotherFunction(); // 5
var a = 3;
console.log(a); // 3
function anotherFunction()
console.log(a); // 5;
【讨论】:
以上是关于带var和不带var的javascript变量之间的区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章