zoukankan      html  css  js  c++  java
  • 预解析的知识点

    先分析函数形参(默认值为undefined),再分析形参赋值(没有形参的直接忽略此步骤)
       分析函数体中所有的变量声明:
    2.1 如果变量名与形参名相同时,直接忽略var;
    2.2 如果变量名与形参名不同时,就相当于声明了一个变量,如var foo,值为undefined;
          分析函数体中所有的函数声明,
    3.1 如果函数名与变量名相同,函数整体将作为变量的值;
    3.2 如果函数名与变量名不相同,相当于var 函数名 = function 函数名 () {};
           函数执行过程分为2步:
           词法分析过程;
           执行过程

    变量声明及函数声明预解析时,变量解析为undefined,函数解析为其本身。
    预解析时函数声明优先级高于变量声明,
    函数声明会覆盖变量声明,但不会覆盖变量赋值。
    如果声明变量的同时初始化或赋值那么变量优先级高于函数。

    一、作用域概念、预解析规则、表达式
    1、作用域概念
    什么是作用域:简单说就是作用的范围,指的是函数在哪些范围内可以用,而在其他部分就不可以 使用,如果需要使用就需要重新定义。
    作用域的作用是什么:用来执行读或者写的操作。
    2、预解析规则
    script:自上而下进行解析,
    函数:由里到外进行解析。
    但是浏览器在执行JS代码的时候会分成两部分操作:预解析以及逐行执行代码
    预解析:浏览器在开始工作的时候会先解读JS代码的关键字:比如:var function 参数等,并把解析到的内容存入一个类似仓库的地方,这个过程一般称为JS预解析。
    并且,在这个阶段所有的变量,在正式运行代码之前,都会提前赋值为未定义

    函数在正式运行代码之前则是整个函数块。
    在这个过程中如果函数和变量重名的话只会保留函数。
    3.表达式
    在将上边的问题的时候我们遇到一个现象:就是函数不会改变值,但是表达式却可以。
    首先先来总结一下表达式有哪些?
    表达式:= + - * / % ++ -- ! 参数……
    作用:表达式可以修改预解析的值!

  • 相关阅读:
    JavaScript OOP 思想
    单页界面和 AJAX 模式
    jQuery 的 ready 函数是如何工作的?
    Dojo系列教程
    谈谈javascript语法里一些难点问题(一)
    2014年总结、2015年的小计划--女生程序员小感想
    Android名词解释
    【JS】defer / async
    关于对defer的理解.
    defer和async的区别
  • 原文地址:https://www.cnblogs.com/yeanling/p/11081968.html
Copyright © 2011-2022 走看看