视频加载失败

JS中的预解释

627 字
3 分钟
JS中的预解释

预解释的基础知识#

例子:

console.log(d);//-->function d(){};
d=1;//-->d=1
s=d;//-->s=1
function d(){//-->xxxfff000
}
d();//-->d is not a function
  • 1.预解释:

    是一个过程,作用域形成之后,代码执行之前,把所有带var关键字和function提前声明或定义。

  • 2.作用域:

    1. 全局作用域:window下,一打开浏览器就会形成。
    2. 私有作用域:一个函数就是一个私有作用域,函数一执行就会形成私有作用域。
  • 3.声明:

    告诉浏览器这里有个变量,var关键字的只有声明。

  • 4.定义:

    赋值过程,在预解释的时候function即声明还定义。

  • 5.注意:

    预解释的时候遇到变量已经声明过了就不用声明了,但是需要重新定义,例如:

    //变量只声明未定义就是undefined
    console.log(obj1);//-->undefined
    var obj1={name:"111"};
    console.log(fn);
    function fn() {}
    // 1. 全局作用形成
    // 2. 全局作用域下的预解释:var obj1,function fn=xxxfff000
    // 3. 代码执行:
    // 1.console.log(obj1);-->undefined
    // 2.obj1=xxxfff111
    // 3. console.log(fn);-->function fn() {}

预解释的几种特殊情况#

注意: 全局作用域下的变量就是window的一个属性

1.=右边函数不进行预解释#

函数作为值的时候,绑定事件的时候,不进行预解释,如下:

var ff=function () {
console.log(1);
};

2.return后面的代码不执行但是需要预解释#

return出的内容执行但是不进行预解释:

function fn() {
var a=0;
console.log(f);//function f(){}
return function () {
console.log(1);
return 1
};
function f() {}
}
var d=fn();
console.log(d());
fn()();

3.在条件语句中#

  1. 不管条件是否成立都进行预解释
console.log(num);
if (0){
//虽然条件不成立 但是需要预解释
var num=0
}
ss=0;//->window.ss=0
console.log("ss" in window);
  1. 条件中有函数function

    在条件中的var和function只声明不定义,声明的时候当遇到变量已经被声明了,就会报错。

    if('a' in window){
    var a=1;
    function(){};//-->'a' has already been declared
    }

    条件一旦成立,首先给函数赋值

    console.log(a);
    if ("a" in window){
    console.log(a);
    a=1;
    function a() {}
    console.log(a);
    }
    //预解释:function a -->就相当于给window增加一个“a”属性
    //"a" in window 就是true
    //条件成立第一步先给function a赋值=xxxfff000
    //代码执行:console.log(a);xxxfff000->function a() {}
    // a=1,重新给a赋值

4.自执行函数 不进行预解释#

//console.log(sss)
;(function sss() {
console.log("a")
})();

5.函数作为参数的时候不进行预解释#

[1,2,3].sort(function(a,b){
return a-b;
});

6.预解释的时候遇到已经声明过得变量不需要声明了,但是需要定义#

var s1=1;
function s1() {//s1=xxxfff000
console.log("s1")
}
function s1() {//s1=xxxfff111
console.log("s11")
}
console.log(s1);

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
JS中的预解释
https://gaodaxiu-blog.netlify.app/posts/JS中的预解释/
作者
GaoDaXiu
发布于
2017-04-29
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
GaoDaXiu
Hello, I'm GaoDaXiu.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
76
分类
20
标签
128
总字数
72,109
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Netlify CI
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录