js 变量、函数声明提前问题
1、变量声明提前:
看代码
(function(){ function add(){ alert(a); }})()/* 以上代码报错:ReferenceError: a is not defined, * 这很好理解 根本就没声明当然报错啦,往下看: */(function(){ function add(){ alert(a); // output:undefined; var a = "bcd"; alert(a); // output:bcd; }})()//以上代码对于解释器来说是下面这样的,所以没有报错,且输出了undefined;(function(){ function add(){ var a; // eq: var a = undefined; alert(a); // output:undefined; a = "bcd"; alert(a); // output:bcd; }})()//再来看一中情况:(function(){ var a = "wer"; function add(){ alert(a); // output:undefined; var a = "bcd"; alert(a); // output:bcd; }})()/* *原因如下:对于解释器来代码是这样的 */(function(){ var a = "wer"; function add(){ var a; // eq:var a = undefined; alert(a); // 向上首先找到局部变量a, a = "bcd"; alert(a); }})()
2、函数提前:
(function(){ alert(add(1, 3)); // output:4, function add(x, y){ return x + y; }})// 以上代码中函数add 不只是声明提前了而是整个add函数的定义都被提前了//另一种情况:(function(){ alert(add(1, 3)); //TypeError: add is not a function var add = function(x, y){ return x + y; }})()//对于编译器来说代码如下:(function(){ var add; alert(add(1, 3)); //所以TypeError add = function(x, y){ return x + y; }})()
总结: 1、变量的声明被提前到作用域顶部,赋值保留在原地2、函数声明整个“被提前”3、函数作为值赋给变量时只有变量“被提前”了,函数没有“被提前”
关键字:JavaScript
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!