当前位置: 首页 > 编程笔记 >

javascript定义变量时有var和没有var的区别探讨

欧阳德运
2023-03-14
本文向大家介绍javascript定义变量时有var和没有var的区别探讨,包括了javascript定义变量时有var和没有var的区别探讨的使用技巧和注意事项,需要的朋友参考一下

我们先来看一段代码

function show(){ 
alert(abc); 
} 
var abc="defg"; 
show();

有过C++或Java编程经验的人可能会说:“这程序,死定了,变量竟然在引用了该变量的函数后边定义,bug会灭掉你的。”放在浏览器上运行一下,结果怎样?完美运行!接下来我们就说一下这是咋回事——有var和没有var定义的变量的区别。

1、没有var

简明的说,定义变量时省略var是不安全的,不过是合法的。这时无论该变量是在什么位置定义的,解释器都会赋予该变量以全局作用域。

2、有var

安全的,合法的。定义的变量的作用域取决于定义的位置。至于作用域具体是什么,请参见本博客中“javascript作用域”一文。

这样,开头的那个问题可以解决了。函数中的才是对abc的定义,只不过值为undefined,这时abc有全局作用域,函数外的只是对abc的值的更新。

 类似资料:
  • 本文向大家介绍浅谈JavaScript中定义变量时有无var声明的区别,包括了浅谈JavaScript中定义变量时有无var声明的区别的使用技巧和注意事项,需要的朋友参考一下 前段时间回答了一个关于定义变量时使用关键字var与否的区别,总结回顾一下。 1.在函数作用域内 加var定义的变量是局部变量,不加var定义的就成了全局变量。 使用var定义: 不使用var定义: 2.在全局作用域下,使用v

  • 本文向大家介绍js中let和var定义变量的区别,包括了js中let和var定义变量的区别的使用技巧和注意事项,需要的朋友参考一下 javascript 严格模式 第一次接触let关键字,有一个要非常非常要注意的概念就是”javascript 严格模式”,比如下述的代码运行就会报错: 错误信息如下: 解决方法就是,在文件头添加”javascript 严格模式”声明: let和var关键字的异同 声

  • 问题内容: 我在此阅读了bash手册页,但我不了解其中的区别。我对它们进行了测试,它们似乎产生了完全相同的结果。 如果未通过命令行参数设置值,我想设置变量的默认值。 上面的代码回显if 为null并回显if不为null的值。这样: 根据Bash手册页, 使用默认值。如果参数未设置或为null,则替换单词的扩展名。否则,将替换参数的值。 分配默认值。如果参数未设置或为空,则将单词扩展指定给参数。然后

  • 本文向大家介绍JS变量中有var定义和无var定义的区别以及es6中let命令和const命令,包括了JS变量中有var定义和无var定义的区别以及es6中let命令和const命令的使用技巧和注意事项,需要的朋友参考一下  之前我们在写js代码的时候都知道可以用var定义全局变量和局部变量,也可以省略var,而且在非严格模式下不会报错,但是并不知道两者的区别... 简单测试下可以知道定义的x和y

  • 问题内容: 在编程中,尤其是在Java中,两者之间有什么区别? 和 这会对for循环产生什么影响? 例如 问题答案: tldr; 尽管和都会使它们所应用的变量递增,但是by 所返回的结果是递增之前的变量值,而by 所返回的结果就是应用递增之后的变量值。 进一步说明 当或形成完整的语句时(如您的示例),两者之间没有区别。例如以下 等同于 但是,当或用作较大语句的一部分时,两者可能不相等。例如,以下断

  • 问题内容: ECMAScript 6引入了该声明 我听说它被描述为“局部”变量,但是我仍然不太确定它的行为与关键字的不同。 有什么区别?什么时候应该用完? 问题答案: 主要区别是作用域规则。用关键字声明的变量的作用域为立即函数主体(因此作用域为函数),而变量的作用域为由表示的立即 封闭 块(因该块作用域)。 将关键字引入语言的原因是函数范围令人困惑,并且是JavaScript中错误的主要来源之一。