javascript中function的优先级比var高

作者:norion时间:2012年7月13日评论次数:3 条

我们来看一段代码:

var xx = 99;
(function(){
	alert(xx);
	var xx = 100;
})();

你觉得这段代码执行后的结果是什么,99、100?其实都不对,而是 undefined ,那这个是为什么呢?函数外面不是有 var 声明 xx 还给它定义了一个值?其实,在 javascript 中 function 的优先级比 var 高,接下来再看一段:

(function(){
	alert(xx);
	var xx = 99;
	function xx(){
		alert(100);
	}
	alert(xx);
})();

你会不会觉得得出的结果是先打印 undefined 呢?运行一下,原来它将 xx() 整个函数打印出来了,这因为 javascript 将 function 提前解析了。再来看一段更简单的:

var xx;
function xx() {}  
alert( typeof xx );

这样问题就简单明了了,当然,如果你认为,xx被后执行的funcion覆盖了。好,将它们调换下:

function xx() {}
var xx;
alert( typeof xx );

上一篇: jquery选择器返回的是一个数组

下一篇:jquery-calendar.js一款不错的日期选择插件

相关文章

评论

  1. 黄家兴
    八月 16, 2012 10:47:10 #1

    你错了,你看看 http://bonsaiden.github.com/JavaScript-Garden/zh/#function.scopes 这篇文章中变量声明提升(Hoisting)部分!

    @回复
    • norion
      八月 26, 2012 22:59:22

      里面有一句是这样说的:“JavaScript 会提升变量声明。这意味着 var 表达式和 function 声明都将会被提升到当前作用域的顶部。”,但并没有说那个优先,你说我错了,你怎么解释上面的例子?

      @回复
  2. ld~
    四月 26, 2013 20:48:20 #2

    你搞错了吧,
    第一个例子访问的是局部变量,局部变量var以后被赋值undefined所以alert是undefined
    第二个例子var 先赋值undefined 然后被function覆盖了第二个alert时 赋值操作已经执行了 所以是99
    第三个例子 function不用说了
    第四个例子 一开始是function 后面的var并不是赋值语句,如果var定义的值已经有了非undefined值,单写一个var是不会再次给它赋上undefined的,不信可以自己去试试。
    总之,function 和var是同优先级的,谁先写就先执行谁,但是function 在前的时候var不会覆盖掉,而var在前的时候,function会覆盖掉var 产生的undefined

    @回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注