• 预解释


    预解释:
    是一个过程,在作用域形成之后,代码执行之前,把所有带"var"和"function"的提前声明或定义

    作用域:
    全局作用域:window下,一打开就会形成
    私有作用域:一个函数就是一个私有作用域,函数执行的时候这个作用域就会形成

    注意!全局作用域下的变量相当给window增加了一个属性
    

    声明:高速浏览器这里有一个变量,var关键字的只有声明
    定义:赋值过程,在预解释的时候function既声明还定义

    预解释的时候遇到已经声明过的就不需要再重新声明但需要重新定义
    
    console.log(obj1);
    var obj1={name:"111"};
    console.log(fn);
    function fn(){};
    //1.全局作用域形成
    //2.全局作用域下的预解释:var obj1,function fn=xxxfff000
    //3.代码执行:
    01.console.log(obj1)输出obj;Undefined
    变量只声明未定义就是Undefined
    02.obj1=xxxfff111
    03.console.log(fn);-->function fn(){}
    

    内存分为两种

    堆内存和栈内存

    堆内存就是用来存储东西的,一般都是存储应用数据类型
    栈内存就是存储"作用域"

    小练习:

    function d(){
    console.log(a)
    }
    var a=1;
    var obj={a:"bb"}
    var obj={a:"dd",b:obj.a};
    console.log(obj.a,obj.b);
    d();
    1.全局作用域形成
    2.全局下预解释:var: a和obj(第一个),function d=xxxfff000
    3.代码执行
    01.d(),函数体里面代码执行,输出Undefined(只声明未定义)
    02.a=1
    03.obj=xxxfff111(a:"bb")
    04.obj=xxxfff222(a:"dd",b:xxxfff111.a),先存储后生成地址,在存储的过程中obj指的是谁
    05.执行输出 obj.a-->"dd",obj.b-->"bb"
    06.d() 输出a=1
    

    赋值的过程是先将=等号右边的进行计算,之后再赋给左边的变量


    预解释的特殊情况

    等号右边不进行预解释(函数作为值的时候不进行预解释)

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

    return 下面的代码不执行但是需要的预解释,return返回出的内容执行但是不进行预解释

    function fn(){
    var a=0;
    console.log(f);// 会输出整个函数function f(){}
    return function(){
    console.log(1)};
    function f(){};}
    

    不论条件是否成立都进行与解释

    console.log(num);
    if (0){
    //虽然条件不成立 但是需要预解释
    var num=0
    }


    检测某个作用域里是不是有这个属性用"in"

    ss=0;//->window.ss=0
    console.log("ss"in window);
    

    小练习

    comsole.log(aa);
    if(!("aa"in window)){
    var aa=1;
    }
    console.log(aa)
    


    自执行函数 不进行预解释

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

    
    ----------
    >预解释的时候遇到已经声明过的变量不需要声明了,但是需要定义
    >```
    >function s1(){
    >console.log("s1")}
    >function s1(){
    >console.log("s11")}
    >```
    >1.全局作用域形成
    >2.预解释var s1 ,function s1=xxxfff000,s1=xxxfff111
    >3.代码执行: s1=1
    >最后输出 1
  • 相关阅读:
    企业使用数据库的12种姿势
    回归架构本质,重新理解微服务
    Java中随机数的产生方式与原理
    自动类型转换、强制类型转换、作用域、整型表数范围
    创建自定义类的对象数组
    CentOS上安装比较习惯的代码编辑器
    ubuntu 15.04 的安装遇到的问题及其解决方法
    算法思想篇(1)————枚举算法
    初来乍到
    Eclipse中获取html jsp 标签的属性提示信息方法
  • 原文地址:https://www.cnblogs.com/Jiazexin/p/7080367.html
Copyright © 2020-2023  润新知