• 函数的变量提升小总结


    函数


    变量提升(预解析、预处理)

    在全局只看2个东西(var和function)

    一.
    1、var a = undefined
    遇见var不但会找到变量,并且给变量赋值undefined
    如果2个变量名是一样的,下面把上面的覆盖即可
    2.function a(){}
    遇见函数直接把函数名提升并且赋值为整个代码块,
    2个函数名字一样的情况下,下面把上面的覆盖
    (只需要看最后一个函数就行)
    3.变量名与函数名一样的情况下最终留下的是代码块(函数)
    如果是函数声明那么就不会在读取了(只是预解析的那一次)
    函数表达式是带等号的,所以会读
    二.逐行解读代码
    只看等号

    变量和window的属性

    当使用var来声明变量的时候,自动会给window上添加一个同名属性。
    var a = '' window.a

    有变量的时候才会和widnow的属性是相映射的

    没有变量的时候,window的属性只有赋值之后才会挂上,如果在赋值之前访问
    属性只是undefined

    在全局范围中所有的属性,方法都属于window,没有主默认主是window

    aa = > window.aa
    window.aler


    in是运算符,它能够运算某个属性是不是这个对象的

    '属性名' in 对象
    有:true
    没有:false
    简单类型的属性
    没有会是undefined,自定义也是undefined,自身有那么就是后面的值


    经过试验,chrome下70版本
    当window中默认属性的值为是字符串时,并且在var变量赋值数字时,
    结果会为字符串
    name,defaultStatus,status...

    一般情况下,对象的属性能读能写,写什么,读的就是什么。

    局部作用域:
    在函数中或者块中有的作用域。

    在局部作用域中有自己的一套预解析机制、逐行解读代码并且赋值。

    特点:(词法作用域)
    如果是函数套函数的情况下,越里面的函数中的变量优先级就越高.

    子函数没有,会去父函数中查找,如果还没有再到外层查找,
    直到找到window,如果都没有就报错。

    不能父函数找子函数(从里往外找,不允许从外往里找)。

    ES6中有了块的概念
    {

    }

    使用let||const是支持块级作用域的,let或者const只会作用于在块

    如果在块中有声明函数,那么在这个块中的任何地方都能找到这个代码块

    如果不在这个块中,并且为声明之前访问块中的函数,
    那么值为undefined


    传参

    函数内先看有没有变量,如果没有变量还会去找参数有没有
    优先级:
    先找函数内的变量,如果变量为undefined,才找参数
    参数有:走参数,
    如果是简单类型的数据并且内部修改这个值,外部是不会受到影响
    如果是复合类型的数据并且内部修改了这个类型的值,外部也是会受到干扰的

    注意:

    如果函数内部的参数被修改地址了,此时,修改内部对象是不会影响外部对象的。
    参数没有就找父级,直到window
    在函数中,如果有形参并且赋值而且还有变量,在声明变量的上方访问
    那么结果是实参。

    代码的世界很精彩,好的代码需要慢慢的打磨。
  • 相关阅读:
    [转]测试的基本概念
    记录
    flash 与 程序通讯
    怎么正确的建立项目
    安装包的制作
    JS
    页面刷新定位
    [转]C#处理XML
    MSN机器人
    报表 的使用
  • 原文地址:https://www.cnblogs.com/Allisson/p/9872439.html
Copyright © 2020-2023  润新知