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和没var的区别示例介绍
本文来论述JavaScript中变量声明有var和没var的区别,关于Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (function(){ // ... })(); 在函数内部,有var和没var声明的变量是不一样的.有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口东东. 在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECMAScrpit5提供
-
Javascript全局变量var与不var的区别深入解析
相信你对全局变量一定不陌生,在函数作用域里用a=1这种形式定义的变量会是一个全局变量,在全局作用域里,用下面3种形式都可以创建对全局可见的命名: 复制代码 代码如下: <script>var a = 1;b = 2;window.c = 3;</script> 对于b=2这种方式, 它其实和c是一样的,在执行这个赋值语句的时候,会沿着作用域链寻找名字叫做b的变量,一直找到作用域链的顶端还没有找到,于是给window添加一个属性b然后赋值. var与不var有两个区别: 1 var的
-
javascript定义变量时加var与不加var的区别
一.外部的为全局,内部的为局部变量. 二.加var为局部变量(在方法内),不加var为全局变量(当方法内有一次使用后) 复制代码 代码如下: <script type="text/javascript"> var golbe="global"; test(); function test(){ var local="local"; document.write(golbe); document.write(l
-
关于JavaScript中var声明变量作用域的推断
一.迷思!由一段代码引发的疑惑 请看如下代码: 复制代码 代码如下: for(var i=0;i<3;i++) { console.log(j+","+k); for(var j=0;j<3;j++) { var k = j+1; } } console.log(i); 输出结果: undefined,undefined 3,3 3,3 3 如果你是搞c.java等语言的,可能你会不解,为何j.k这种局部变量可以被作用域外的代码访问呢? 如果JavaScript中用var声
-
JavaScript中const、var和let区别浅析
在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. const b = 2;//正确 // const b;//错误,必须初始化 console.log('函数外const定义b:' + b);//有输出值 // b = 5; // console.log('函数外修改const定义b:' + b);//无法输出 2.var定义的变量可以修改,
-
浅谈JavaScript中定义变量时有无var声明的区别
前段时间回答了一个关于定义变量时使用关键字var与否的区别,总结回顾一下. 1.在函数作用域内 加var定义的变量是局部变量,不加var定义的就成了全局变量. 使用var定义: var a = 'hello World'; function bb(){ var a = 'hello Bill'; console.log(a); } bb() //'hello Bill' console.log(a); //'hello world' 不使用var定义: var a = 'hello World'
-
在Javascript中 声明时用"var"与不用"var"的区别
Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在当前域中声明变量. 如果在方法中声明,则为局部变量(local variable):如果是在全局域中声明,则为全局变量. 而 num = 1: 事实上是对属性赋值操作.首先,它会尝试在当前作用域链(如在方法中声明,则当前作用域链代表全局作用域和方法局部作用域etc...)中解析 num: 如果在任何
-
JavaScript中var关键字的使用详解
作用 声明作用:如声明个变量. 语法 var c = 1; 省略var 在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的. <script type="text/javascript"> function Define() { a = 2; } function Hello() { alert(a); } </script> 如代码所示,运行函数Define()后,变量a声明为全局变量.在Hello
-
Javascript中的var_dump函数实现代码
发现了一个非常好的JavaScript调试方法,目前看到的是可以打印Object/Array/Function/String四种类型,使用方法和PHP中的var_dump()一样,只要直接dump(变量名)即可. 复制代码 代码如下: dump(value, [showTypes]) @ param value (Any) value to dump @ param [showTypes] (Boolean) optional to display each key/value's type @
-
javascript定义变量时带var与不带var的区别分析
本文实例分析了javascript定义变量时带var与不带var的区别.分享给大家供大家参考.具体分析如下: 直接看实例里说明: 复制代码 代码如下: <script language="javascript" type="text/javascript"> var abc=89;//带var,表示全局变量 function test(){ var abc=80;//在函数内部,如果不带var,表示使用函数外全局变量:带上var,表示新定义一个全局变量
-
JScript中的'var'定义变量的作用域
都不记得是什么时候看的JScript的语法教程了,里面说在声明变量时忽略var关键字是完全合法的.当时也因为觉得JavaScript是loosely-typed的语言,所以var可能真的就是个摆设.但是事实常常又证明想当然的结果是不可靠的. 看看下面这几个例子的结果就知道问题了: No.1 var var00 = 0; document.write(var00 + ' '); var var01 = 1; function foo() { document.write(var01); va
随机推荐
- 浅谈JSON中stringify 函数、toJosn函数和parse函数
- iOS开发中的几个手势操作实例分享
- 正则表达式在IOS中的应用及IOS中三种正则表达式的使用与比较
- 让editplus3 函数模板完全显示函数
- Java的设计模式编程中迪米特法则的应用示例
- 实例讲解Java并发编程之变量
- ASP.NET中内嵌页面代码的一个问题
- 解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
- VC++实现程序开机启动运行的方法
- MySQL 常见错误分析与解决方法
- Android进程间通信(IPC)机制Binder简要介绍
- 自定义百度分享的分享按钮
- ios7中UIViewControllerBasedStatusBarAppearance作用详解
- JS动态计算移动端rem的解决方案
- response.setContentType()的作用及MIME参数详解
- JavaScript获取URL中参数querystring的方法详解
- jquery处理checkbox(复选框)是否被选中实例代码
- 利用nodejs监控文件变化并使用sftp上传到服务器
- 深入理解JavaScript中的传值与传引用
- 利用纯js + transition动画实现移动端web轮播图详解