小白学js第六天之代码规范,作用域以及预解析

目录

  • 代码规范

    • 命名规范
    • 变量规范
    • 注释规范
    • 空格规范
    • 换行规范
  • 作用域
    • 全局变量
    • 局部变量
    • 块级作用域
    • 作用域链
  • 预解析
    • 什么是预解析
    • 变量提升

      此篇木有脑图,嘻嘻

代码规范

命名规范

  • 变量、函数的命名必须要有意义
  • 变量一般用名词
  • 函数一般用动词

变量规范

  • 操作符前后要有空格
var name = 'zs';

注释规范

 // 这里是注释
 

空格规范

    if (true) {

    }

    for(var i = 0; i < n; i++ ) {

    }

换行规范

    var arr = [1, 2, 3, 4];
        if (a > b) {

        }
        for (var i = 0; i < 10; i++) {

        }
        function fn() {

        }

作用域

变量可以起作用的范围

全局变量

在任何一个地方都能访问到的变量

  • 不使用 var 声明的变量就是全局变量, 但不推荐这么写

局部变量

只在固定的代码块可以访问到的变量,比如最常见的就是函数内部。对应的局部作用域

  • 局部变量退出作用域之后就会被销毁,而全局变量只有在关闭网页或浏览器时才被销毁
    var arr = [1, 2, 3, 4]; // 全局变量
        if (a > b) {
          var c; //局部变量
        }
        for (var i = 0; i < 10; i++) {

        }
        function fn() {

        }

块级作用域

任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。
在es5之前没有块级作用域的的概念,只有函数作用域,现阶段可以认为JavaScript没有块级作用域

作用域链

  • 只有函数可以制造作用域结构,那么只要是代码,就至少有一个作用域,即全局作用域。凡是代码中有函数,那么这个函数就构成另一个作用域。如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。
  • 将这样的所有的作用域列出来,可以有一个结构: 函数内指向函数外的链式结构。就称作作用域链。
// 案例2
function f1() {
    var num = 123;  // 1级链
    function f2() { // 2级链
        console.log(num);
    }
    f2(); // 1级链
}
var num = 456; //0级链
f1(); //// 0级链
// 0级链表示 全局 1级链表示 局部    2级链表示局部的局部 以此类推

预解析

什么是预解析

JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程

预解析过程:

  • 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
  • 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
  • 先提升var,再提升function。

代码执行过程

案例

        f1();
        console.log(c);
        console.log(b);
        console.log(a);

        function f1() {
            var a = b = c = 9;
            console.log(a);
            console.log(b);
            console.log(c);
        }
        //预解析过程
        // function f1() {
        //     var a = b = c = 9;
        //     console.log(a);
        //     console.log(b);
        //     console.log(c);
        //     //function f1()内部预解析过程
        //     var a = b = c = 9;
        //     var a = 9; // a是局部变量
        //     b = 9;
        //     c = 9;  // 因为b c没有用var声明 所以 bc是全局变量
        //     console.log(a);
        //     console.log(b);
        //     console.log(c);
        // }
        // f1(); // 因为上来先调用了函数,所以要先对函数内部进行预解析
        // console.log(c);
        // console.log(b);
        // console.log(a);

变量提升

变量提升

定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升

函数提升

javascript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面

注意:先提升var,再提升function。

案例

    var a = 18;
    f1();
    function f1() {
    var b = 9;
    console.log(a);
    console.log(b);
    var a = '123';
 }
// var a;
    f1();

// f1()内的预解析
function f1() {
    var b;
    var a;
    console.log(a); // undefined  a因为变量提升,所以只被声明了,而没有被赋值
    console.log(b); // 9
    a = '123';
}
 a = 18;
 console.log(a); // 18

原文地址:https://www.cnblogs.com/1020-jj/p/10859421.html

时间: 2024-10-14 06:30:16

小白学js第六天之代码规范,作用域以及预解析的相关文章

关于作用域和预解析的不常见重要知识

作用域和预解析 在javascript中作用域是非常重要的,本文章将会说明作用域,如果有不足的地方希望大家可以评论指出来,自己一定会及时的改正错误,避免大家走入一些误区. 谈及作用域先就必须要说明预解析和词法作用域. 下面我们先说明一下: 预解析 代码在正常执行操作之前会对文档进行一次解析,这个操作就是将声明提升, 声明包括全局范围内  1.带有var的变量, 2.函数 文档预解析后会把文档中在全局函数中的内容储存起来,将全局中带有var的变量(var和变量名,注意:变量体不会随着提升,加载va

JavaScript中作用域和预解析

作用域以及预解析 在javascript中作用域是非常重要的,本文章将会说明作用域以及我们在工作,以及面试中的一些面试题,如果有不足的地方希望大家可以评论指出来,自己一定会及时的改正错误,避免大家走入一些误区. 谈及作用域先就必须要说明预解析和词法作用域. 下面我们先说明一下: 预解析 代码在正常执行操作之前会对文档进行一次解析,这个操作就是将声明提升, 声明包括全局范围内 1.带有var的变量, 2.函数 文档预解析后会把文档中在全局函数中的内容储存起来,将全局中带有var的变量(var和变量

JS作用域概念-预解析规则

// 作用域: // 域:空间.范围.区域…… // 作用:读.写 script 全局变量.全局函数 自上而下 函数 由里到外 {} 浏览器: “JS解析器” 1)“找一些东西” :var function 参数 a = ... 所有的变量,在正式运行代码之前,都提前赋了一个值:未定义 fn1 = function fn1(){ alert(2); } 所有的函数,在正式运行代码之前,都是整个函数块 JS 的预解析 遇到重名的:只留一个 变量和函数重名了,就只留下函数 2)逐行解读代码: 表达式

JS的作用域和预解析

当我们使用Js 来编写一个函数的时候,总是会分不清,自己所声明的变量到底是全局变量,还是局部变量,这就牵扯到了作用域的问题.以及在函数执行的时候,函数内部的变量与全局变量及输出结果,在不同状况下的关系问题.下面就让我来举例说明一下. 作用域: 指的是代码对不同的“范围”的划分. 划分规则: 1 全局是一个作用域 这个作用域叫做全局作用域 2 只有函数,可以划分这么一个“范围”(作用域) 这样划分出来的作用域叫做私有作用域. 划分规则的应用对象: 变量 所以我们可以理解为: 作用域 划分了一个所有

JavaScript有关作用域和预解析

作用域:使用范围 全局变量:声明的变量是使用var声明的,那么这个变量就是全局变量,全局变量可以在页面的任何位置使用 除了函数以外,其他的任何位置定义的变量都是全局变量 局部变量:在函数内部定义的变量,是局部变量,外面不能使用 全局变量,如果页面不关闭,那么就不会释放,就会占空间,消耗内存 全局作用域:全局变量的使用范围 局部作用域:局部变量的使用范围 块级作用域:一对大括号就可以看成是一块,在这块区域中定义的变量,只能在这个区域中使用,但是在js中在这个块级作用域中定义的变量,外面也能使用;

作用域和预解析

// 作用域: // 域:空间.范围.区域…… // 作用:读.写 script 全局变量.全局函数 自上而下 函数 由里到外 {} 浏览器: “JS解析器” 1)“找一些东西” :var function 参数 a = ... 所有的变量,在正式运行代码之前,都提前赋了一个值:未定义 fn1 = function fn1(){ alert(2); } 所有的函数,在正式运行代码之前,都是整个函数块 JS 的预解析 遇到重名的:只留一个 变量和函数重名了,就只留下函数 2)逐行解读代码: 表达式

作用域,预解析,对象,内置方法 Math Date Array

作用域 一段程序代码中所用到的名字并不总是有效可用的,而限定这个名字(变量)的可用性的代码范围,就是这个名字的作用域,作用域提高了逻辑程序的局部性,增强了可靠性,减少了名字冲突: JavaScript作用域(es6)之前:全局作用域,局部作用域 全局作用域:整个script标签或者是一个单独的JS文件 局部作用域(函数作用域):在函数内部就是作用域: 变量作用域 全局变量:在全局作用域下声明的变量:如果在函数内部没有声明(var)直接赋值的变量也是全局变量 num = 2; 局部变量:在函数内部

javascript里面的闭包,作用域,预解析

函数的作用域 1.全局变量=公用卫生间 2.局部变量=次卧卫生间      局部变量 全局无法使用      局部声明变量不加var的话就变成全局变量(不推荐使用) 3.闭包=次卧的可以用自己的卫生间,也可以用公用卫生间: 预解析 1.先把变量声明 全部提前,赋值不动 2.函数也有预解析,直接提前   3.预解析 不会脱离函数作用域,也不会冲出script标签 最多提到自己标签的顶部 代码执行顺序 见一个srcipt解析执行一个,执行完了 在执行下一个 案例1:      alert(a);  

小白学js第四天

流程控制 目录 表达式和语句 流程控制的三大结构 debug 流程控制脑图请戳?[http://naotu.baidu.com/file/30ab2cfa33a855fb631c04f849b4a2e3?token=d497f04ccc07ad7b] 1 表达式和语句 1.1 表达式 可以产生一个值,有可能是个运算.函数.字面量 可以放在任何需要值的地方 1.2 语句 可以理解为一个行为,用:结束一个语句 2 流程控制的三大结构 2.1 顺序结构 由上到下依次执行 程序默认都是由上到下依次执行