2 yishuixs yishuixs 于 2016.02.27 17:16 提问

js var到底有几层意思

如下一段代码:

 var a = 'a';

 say();

 function say() {
     console.log(a);
     var a = 'b';
     cosnole.log(a);
 }

为何会返回undefined?

6个回答

showbo
showbo   Ds   Rxr 2016.02.27 20:06
已采纳

var申明的变量会预定义赋值为undefined,访问的并不是window下的a,你的代码等价于下面的

  function say() {
   var a=undefined;
     console.log(a);
     a = 'b';
     cosnole.log(a);
 }

javascript运行机制

qq_31307253
qq_31307253   2016.02.27 18:38

我个人所了解的:var 可以代替整型,字符串,boolean类型
看你上面的代码:第一个consol.log(a),应该输入的 a
第一个consol.log(a),应该输入的 b 吧原来的a='b'覆盖了a='a'

yishuixs
yishuixs 你走错地方了,请出门看方向
2 年多之前 回复
WinsenJiansbomber
WinsenJiansbomber   2016.02.27 19:15

当然是undefined,!作用域的概念先搞清楚,!!var 出现是定义变量,在全局域和 say函数域都用定义a,所以console.log读取的是say域的a变量,同时又早于它初始化的语句,所以还没来得及初始化a的值。

解决方法有两:!去掉say函数的var关键字!!将var行的内容放到say函数的开头。

WinsenJiansbomber
WinsenJiansbomber   2016.02.27 19:17

唉,竟然看到回答者360被请出门外了

WinsenJiansbomber
WinsenJiansbomber   2016.02.27 19:19

ask.csdn.net为毛老这样,点“我要回答”没反应也没提示,等我多点几下就发了好几条出去了。

mzzzzq
mzzzzq   2016.02.28 18:57

这不是var有几层意思的问题,是关于变量的作用域和提前声明的问题,上面的代码可解释成
var a = 'a'; //全局变量a,值为"a"

say();

function say() {
 console.log(a);   //此处的a在下面已声明,但还未定义,所以会输出undefined
 var a = 'b';     //声明一个局部变量a,在整个函数体内有效
 cosnole.log(a);   //输出b

}
上面的代码可改写成如下:
var a = 'a';

say();

function say() {
var a;
console.log(a);
a = 'b';
cosnole.log(a);
}
关于undefined的解释,如果是变量时,表明变量未初始化,对于一些基础,我建议可以看看《javascript 权威指南》

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
js中的var是什么意思
声明(创建) JavaScript 变量 在 JavaScript 中创建变量经常被称为“声明”变量。您可以通过 var 语句来声明 JavaScript 变量:var x; var carname; 在以上声明之后,变量并没有值,不过您可以在声明它们时向变量赋值:var x=5; var carname="Volvo"; 注释:在为变量赋文本值时,请为该值加引号。
请教高手:javascript中var i = {};是什么意思
请教高手:javascript中var i = {};是什么意思  Javascript 专业回答 helen5106 2009-08-10 18:06 2楼的有点急了,呵呵 var i = {}; 跟 var i = new Object(); 是一个意思,JavaScript 有3中方式定义对象,还有一种: function P (x
js中 声明变量时: var $i 和 var i 有什么区别吗 各自是什么意思
var $i=$("#controlID1"); var i=$("#controlID2"); function(){ //这里获取控件对象值 var controlValue1=$i.val(); var controlValue2=$(i).val(); } 就是这个区别,在调用的时候一个需要转成Jquery对象,一个不需要
JavaScript 里 var a = a || {} 啥意思?
JavaScript 里 var a = a || {} 啥意思? var a; if(a === 0 || a === "" || a === false || a === null || a === undefined) a = {} 那句话的定义。还有你这种情况 a 是函数的入口参数吧,代码是这样的对吧 function(a){ var a = a || {}
“原型”的几层意思 (转)
大中小2007-4-4 14:22:12【作者】 姜玲 【进入论坛】本文关键字 ttnn 2006年05期 $(function(){if(ShowGG1945!=undefined){ShowGG1945();}});刘庆 20060511昨天,在公司等着报销呢,两位不大认得的同事过来,想了解一下客户需求的问题,因为他们奉旨开发"原型",我对他们说的原
javascript中var that=this
你可能会发现别人写的代码中有这么一句:var that = this;,这代表什么意思呢? 在javascript中,this代表的是当前对象。 var that=this就是将当前的this对象复制一份到that变量中。这样做有什么意义呢? $('#zhetenga').click(function(){ //this是被点击的#zhetenga var that
var a={}什么意思
js中var a={}什么意思  创建一个变量a, 并给a赋值; {}是一个空的对象,是 new Object();的简写。
JS 中的 event?event:window.event什么意思?求详解。
JS 中的 event?event:window.event什么意思?求详解。2013-04-16 00:01flying607 | 分类:JavaScript | 浏览813次function Test(event) { event = event ? event : window.event;} 请问:1,“onclick = "Test(this)"”中的this代表什么?2,“ev
js中let和var定义变量的区别
本文对比了js中let和var关键字在声明变量时的异同之处。
js中var self=this的解释
每个函数在定义被ECMAScript解析器解析时,都会创建两个特殊的变量:this和arguments,换句话说,每个函数都有属于自己的this对象,这个this对象是在运行时基于函数的执行环境绑定的,即在全局对象中,this指向的是window对象;在自定义函数中,this对象指向的是调用这个函数的对象, 也就是说,this指向的是调用执行环境的那个对象。 如果是在函数嵌套环境中,this指