从零开始学前端:程序猿小白也可以完全掌握!—今天你学习了吗?(JS)

复习:从零开始学前端:函数 — 今天你学习了吗?(JS:Day8)

文章目录

  • 从零开始学前端:程序猿小白也可以完全掌握!—今天你学习了吗?(JS)
    • 前言
    • 第九节课:作用域、执行顺序
      • 一、作用域【ES5】
      • 二、解析顺序
      • 三、解析顺序练习
      • 四、练习题

前言

这节课我是非常之懵,希望我总结的过程可以再次学会~

第九节课:作用域、执行顺序

一、作用域【ES5】

作用域:脚本的有效范围、作用范围。
分两大类

  • 全局作用域(script)
  • 局部(function)
  1. 全局作用域
    直接定义在scipt标签下的变量,称之为全局变量。script标签下的函数,称之为全局函数,直接在全局作用域内定义的变量为全局变量。
        var a = 123;alert(window.a);        //123function abc() { }alert(window.abc);      //function abc(){}
  1. 函数(局部)作用域

例子:

        // 全局变量var num = 123;function fn() {// 局部变量var num = 666;}console.log(num);  //123   输出的是挂载到window的全局变量

但是如果注释掉全局变量,只输出num,发现也是拿不到局部变量的值,会报错:

当全局作用域与局部作用域都有定义变量的时候,局部作用域里面的值取就近值。

但是如果当里面先输出再定义时,输出为undefined

变量必须先定义,如果没有通过定义的情况,会出现此变量回挂载到顶层对象window中,对window造成污染。

//  上面图片左边又var,右边没有varfunction fn() {str = 'Coisini'}fn();console.log(str)  //Coisini

执行函数内的函数:

        var num1 = 123; function fn() {var num1 = 2;return function () {console.log(num1)}}var a = fn()a()    //2,相当于执行函数内的函数

二、解析顺序

  • 编译阶段
    在作用域内声明的‘变量会被提升到作用域的顶部’且对其赋值‘undefined’,这个过程称之为‘变量提升’,上面代码等同于下面(‘还可以访问父级的参数’)
  • 函数提升
    在作用域内的函数定义函数会被提升到作用于的顶部,其值为其函数本身,这个过程称之为函数提升,上面代码等同于下面

解析顺序【编译模式】:
1. 编译阶段:
找变量声明,函数声明;
2. 执行阶段:
赋值,读取值,for,if,delete;

eg:

        console.log(a);var a = 3;var a = 2;console.log(a);

结果:

解析顺序:

            1.编译阶段:var a ;var a ;2.执行阶段:console.log(a);//undefineda = 3;a = 2;console.log(a);//2

三、解析顺序练习

  1. 第1题
        console.log(num);  //undefined var num = 123;/*定义:var num;执行:console.log(num) //undefinednum = 123;*/
  1. 第2题
        function fn() {console.log(1)}var fn = 2;console.log(fn)    //2/*变量出现重复的情况,函数的优先级比var的优先级高!两个fn,相当于重新定义,重新赋值,所以赋值发生变化定义:function fnvar fn 执行console.log(fn) //2*/

对比于:
变量出现重复的情况,函数的优先级比var的优先级高

        function fn() {console.log(1)}var fn;console.log(fn)  // function fn(){console.log(1)}/*变量出现重复的情况,函数的优先级比var的优先级高!两个fn,相当于重新定义,重新赋值,所以赋值发生变化定义:function fnvar fn 执行console.log(fn) //2*/
  1. 正式练习开始!第3题
        var a = 5;function fn() {console.log(a);   //undefinedvar a = 10;console.log(a)    //10}fn();

执行顺序:

            定义:var afunction fn执行:fn() [此处又开辟了一个作用域]=> 定义:var a 执行:console.log(a) //undefineda = 10;console.log(a)   //10
  1. 第4题
        console.log(a)var a = 10;var a = [];function a() {console.log("fn")}console.log(a)

执行顺序:

            定义:var avar afunction a执行:console.log(a)  //function a(){console.log("fn")}a = 10a = []console.log(a)   //[]
  1. 第5题
        console.log(a)a();var a = 1;console.log(a)var a = [];function a() {var b = 1;console.log("fn")}a();console.log(a)

执行顺序:

            定义:var avar afunction a执行:console.log(a)  //function a(){var b=1;console.log("fn")}a()   // fna = 1console.log(a) // 1a = []a() => errorconsole.log(a)  //[]
  1. 第6题
        fn()console.log(a)var a = 0;console.log(a)function fn() {var a = 1;// a = 1;时,输出1,而不是undefined}

执行顺序:

            定义:var afunction fn()执行:fn() => 定义:var a执行:a = 1console.log(a) //undefineda = 0;console.log(a) //0
  1. 第7题
        fn()()var a = 0;function fn() {console.log(a)var a = 3;function b() {console.log(a)}return b;}

执行顺序:

            定义:var afunction fn执行:fn()()fn() => 定义:var afuntion b执行:console.log(a) //undefineda = 3fn()() => b()定义:执行:console.log(a) //3a = 0
  1. 第8题
        function fn1() {var num = 10;function fn2() {console.log(num)}return fn2;}console.log(fn1())var b = fn1();b();

执行顺序:

            定义:function fnvar b执行:console.log(fn1())  =>  // function fn2(){console.log(num)}   //看return值fn1()=>定义:var numfunction fn2执行:num = 10;return fn2;fn1()=>定义:var numfunction fn2执行:num = 10;return fn2;b = fn1() = 返回return  = fn2   b() = fn2() =>  10

四、练习题

        a()function a() {var fn = function () {console.log(123)}return fn1()}a()var a = 0;var a = 0;function fn1() {console.log(a)var a = 1return a;}console.log(fn1())console.log(a)fn1()()

解答:

       a()function a() {var fn = function () {console.log(123)}return fn1()}a()var a = 0;function fn1() {console.log(a)    //undefinedvar a = 1         //函数内有定义,就近原则return a;}console.log(fn1())    //---函数执行,即fn1()返回的是return的值:aconsole.log(a)fn1()()               //---即a()/*注意:什么时候就近原则,什么时候用函数优先级比var的优先级高// 变量出现重复的情况,函数的优先级比var的优先级高,所以上面的函数优先// 函数内外均有定义时,执行函数时取的是函数内的定义,即就近原则定义:function avar afunction fn1 执行:a()  =>  函数执行,重复定义,函数优先定义:var fnfunction执行:        fn = function(){console.log(123)}   x函数并不执行,没有fn(),执行括号,所以不执行return fn1()   fn1() =>定义:var a执行:console.log(a)  -- 就近原则:   //undefineda = 1return a;       ---a = 1a() =>   函数执行,不受局部变量的影响定义:var fnfunction执行:fn = function(){console.log(123)}   x函数并不执行,没有fn(),执行括号,所以不执行return fn1()  fn1() =>定义:var a执行:console.log(a)  -- 就近原则:   //undefineda = 1return a;       ---a = 1a = 0console.log(fn1()) =>fn1() => 定义:var a执行:console.log(a)     -- 就近原则:     //undefineda = 1return a            -- a = 1        console.log(fn1()) => console.log(a)        // 1console.log(a)                                  // 0fn1()() =>fn1() =>定义:var a执行:console.log(a)       ---就近原则    //undefined a = 1return a            ---1fn1()() => a() => 即1() =>                  //报错,a不是函数,即fn1()不是函数*/

预习:从零开始学前端:字符串和数组的方法 — 今天你学习了吗?(JS:Day10)

从零开始学前端:作用域、执行顺序 --- 今天你学习了吗?(JS:Day9)相关推荐

  1. 从零开始学前端:CSS引入 --- 今天你学习了吗?(CSS:Day07)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(CSS) 复习:从零开始学前端:列表标签 - 今天你学习了吗?(CSS:Day06) 文章目录 从零开始学前端:程序猿小白也可以完全掌握! ...

  2. 从零开始学前端:列表标签 --- 今天你学习了吗?(CSS:Day06)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(CSS) 复习:从零开始学前端:表单制作 - 今天你学习了吗?(CSS:Day05) 文章目录 从零开始学前端:程序猿小白也可以完全掌握! ...

  3. 从零开始学前端:初识JavaScript --- 今天你学习了吗?(JS:Day01)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(JS) 复习:从零开始学前端:jQuery官网 - 今天你学习了吗?(CSS:Day26) 文章目录 从零开始学前端:程序猿小白也可以完全 ...

  4. 从零开始学前端:复习课程 --- 今天你学习了吗?(CSS:Day11)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(CSS) 复习:从零开始学前端:CSS复合选择器 - 今天你学习了吗?(CSS:Day10) 文章目录 从零开始学前端:程序猿小白也可以完 ...

  5. 从零开始学前端:表格制作 --- 今天你学习了吗?(CSS:Day04)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(CSS) 复习:从零开始学前端:链接跳转 - 今天你学习了吗?(CSS:Day03) 文章目录 从零开始学前端:程序猿小白也可以完全掌握! ...

  6. 从零开始学前端:过渡和动画 --- 今天你学习了吗?(CSS:Day20)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(CSS) 复习:从零开始学前端:flex布局 - 今天你学习了吗?(CSS:Day19) 文章目录 从零开始学前端:程序猿小白也可以完全掌 ...

  7. 从零开始学前端:初识函数,合法属性与自定义属性 --- 今天你学习了吗?(JS:Day2)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(JS) 复习:从零开始学前端:初识JavaScript - 今天你学习了吗?(JS:Day1) 文章目录 从零开始学前端:程序猿小白也可以 ...

  8. 从零开始学前端:CSS元素模式的转换和CSS三大特性 --- 今天你学习了吗?(CSS:Day12)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(CSS) 复习:从零开始学前端:复习课程 - 今天你学习了吗?(CSS:Day11) 文章目录 从零开始学前端:程序猿小白也可以完全掌握! ...

  9. 从零开始学前端:CSS复合选择器 --- 今天你学习了吗?(CSS:Day10)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(CSS) 复习:从零开始学前端:CSS背景颜色 - 今天你学习了吗?(CSS:Day09) 文章目录 从零开始学前端:程序猿小白也可以完全 ...

  10. 从零开始学前端:CSS字体属性和文本属性 --- 今天你学习了吗?(CSS:Day08)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(CSS) 复习:从零开始学前端:CSS引入 - 今天你学习了吗?(CSS:Day07) 文章目录 从零开始学前端:程序猿小白也可以完全掌握 ...

最新文章

  1. python if语句多个条件-Python 条件语句(if..elif..else)
  2. Talend Restful
  3. reactNative 打包那些事儿
  4. js中的各种宽度计算
  5. 从框架源码中学习结构型设计模式
  6. Grunt-jsdoc生成JS API文档
  7. Apeaksoft iOS Toolkit for Mac数据恢复软件
  8. Selenium2.0功能测试之设置浏览器大小
  9. 二进制GCD算法解析
  10. 软件测试用例.范文,软件测试用例模板范文.doc
  11. Dubbo 源码解析 —— Directory
  12. ROS机器人操作系统学习
  13. ftp服务器文件不显示,ftp服务器不显示文件夹大小
  14. 【附案例】UI交互设计不会做?设计大神带你开启动效灵感之路
  15. stc单片机c语言程序头文件(stc12c5a60s2.h,stc12c5a60s2头文件在keil中没法用?
  16. openstack 单节点 ubuntu 12.04 server 安装步骤 转自陈沙克老师博客
  17. Android遥控车软件设计,手机APP控制,Wifi遥控小车设计资料分享
  18. Python3实现向指定邮箱发送邮件(支持附件文件、图片等)
  19. 《Love and Math》(1)
  20. permit doing 与permit to do详细区别

热门文章

  1. log4j记录日志到sqlserver数据库
  2. linux svn 安装信息,linux 下安装 subversion(svn) 客户端
  3. antd中tooltip换行_ant design 中实现表格头部可删除和添加
  4. 气候变化与 计算机网络,北京理工大学:气候变化综合评估模式研究获立项
  5. mysql数据完整性约束包括_MYSQL回顾(完整性约束相关)
  6. 游戏角色坐标的保存间隔_游戏岗位看这里鸭——
  7. android在线root,KingRoot全球率先实现Android 7.0一键 Root
  8. android 字体加粗有阴影,Android TextView高级显示技巧实例小结
  9. mysqli扩展是mysql扩展的增强版_PHP学习笔记【22】--PHP数据库编程 mysql扩展库 和mysqli扩展库...
  10. xss绕过字符过滤_IE8 xss filter bypass (xss过滤器绕过)