zoukankan      html  css  js  c++  java
  • 函数的变量提升小总结

    函数


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

    在全局只看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
    在函数中,如果有形参并且赋值而且还有变量,在声明变量的上方访问
    那么结果是实参。

    代码的世界很精彩,好的代码需要慢慢的打磨。
  • 相关阅读:
    HDU 5583 Kingdom of Black and White 水题
    HDU 5578 Friendship of Frog 水题
    Codeforces Round #190 (Div. 2) E. Ciel the Commander 点分治
    hdu 5594 ZYB's Prime 最大流
    hdu 5593 ZYB's Tree 树形dp
    hdu 5592 ZYB's Game 树状数组
    hdu 5591 ZYB's Game 博弈论
    HDU 5590 ZYB's Biology 水题
    cdoj 1256 昊昊爱运动 预处理/前缀和
    cdoj 1255 斓少摘苹果 贪心
  • 原文地址:https://www.cnblogs.com/Allisson/p/9872439.html
Copyright © 2011-2022 走看看