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

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部