zoukankan      html  css  js  c++  java
  • 关于作用域理解的一道题

            var num1 = 55
            var num2 = 66
    
            function f1(num, num1) {
                num = 100
                num1 = 100
                num2 = 100 
                console.log(num) 
                console.log(num1) 
                console.log(num2) 
            }
    
            f1(num1, num2) 
            console.log(num1) 
            console.log(num2) 
            console.log(num)

      如题,问输出的结果?


      首先讲一下执行顺序:

      JS代码执行分为两个部分:

      1.代码的检查装载阶段(预编译阶段),此阶段进行变量和函数的声明,但是不对变量进行赋值,变量的默认值为undefined。

      2.当前作用域中不存在要访问的变量时,则会到上一层的作用域中寻找,直到全局作用域。 

      声明完变量和函数之后,就执行f1(num1,num2)

      函数的参数相当于函数内部隐式声明变量:

            function f1(num, num1) {
                // var num
                // var num1
                num = 100
                num1 = 100
                num2 = 100 
                console.log(num) 
                console.log(num1) 
                console.log(num2) 
            }

      参数传入之后就是将变量赋值:

            function f1(num, num1) {
                // var num = 55
                // var num1 = 66
                num = 100
                num1 = 100
                num2 = 100 
                console.log(num) 
                console.log(num1) 
                console.log(num2) 
            }

      然后很显而易见,num和num1被重新赋值了,发现num2在函数中没有被定义,这个时候就会往上一级的作用域中查找,找到全局的num2,然后修改,就是修改了全局的num2,所以结果:

            var num1 = 55
            var num2 = 66
    function f1(num, num1) { // var num = 55 // var num1 = 66 num = 100 num1 = 100 num2 = 100 // 改变了全局的num2 console.log(num) // 100 console.log(num1) // 100 console.log(num2) // 100 }

      然后看下面的输出:

            console.log(num1) 
            console.log(num2) 
            console.log(num) 

      num1在全局作用域中未被修改且赋值是55,num2被修改为100,num查找作用域,未找到输出则为报错未定义:

      

            console.log(num1) // 55 
            console.log(num2) // 100 
            console.log(num) // undefiend

      打开我们最爱的谷歌,结果显而易见了:

      

  • 相关阅读:
    element-ui select组件中复选时以字符串形式显示
    node.js入门学习笔记整理
    前端面试整理——javascript算法和测试题
    前端整理——css部分
    前端整理——Vue部分
    前端面试题整理——javaScript部分
    React 入门学习笔记整理目录
    element-ui Carousel 走马灯源码分析整理笔记(十一)
    element-ui Collapse 折叠面板源码分析整理笔记(十)
    element-ui Steps步骤条组件源码分析整理笔记(九)
  • 原文地址:https://www.cnblogs.com/likewpp/p/10796427.html
Copyright © 2011-2022 走看看