带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变量之间的区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

带有'var'和不带'var'的javascript全局变量[重复]

js 声明变量带var和不带的区别

js基础var

带和不带引号和括号的 setTimeout 之间的区别

javascript 函数的变量

加var和不加var的区别