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

    今天有个伙伴问了我一个题目,题目如下:

    var x = 10;
    function fn() {
        console.log(x)
    }
    
    function show(f) {
        var x= 20
        (function(){
        f()
      })()
       
    }
    show(fn);

    略作沉思,我的回答是20,小伙伴说是10 ,我昂,按照我的尿性我脑袋想的是四舍五入这段等于

    var x = 10;
    function show(f) {
        var x= 20;
         console.log(x)
    }
    show(fn);
    

    但是其实不是这样的,于是我在想是不是因为匿名执行函数的作用域指向全局的原因呢?

    但又不是

    其实是因为,每个函数都有自己独立的执行环境,在代码完成的时候,就确定了自己的作用域,虽然这里的f被当作一个形参传递进了show中,但是人家f也是有风格的好吗,它还是得按自己得风格做事,也就是说,此处的f定义的时候是一个全局函数,那么它的作用域还是全局的,所以的话,这里的f会去找全局的x 也就是10,

    那么如果我们的全局没有定义x变量会怎么样呢

    function fn() {
        console.log(x)
    }
    function show(f) {
        var x= 20; 
        (function(){
        f()
      })() } show(fn);

     

     找不到全局x变量报错了

    参考:https://blog.csdn.net/hahalalalalalala/article/details/107386666

     

  • 相关阅读:
    202103226-1 编程作业
    阅读任务
    1 20210309-1 准备工作
    20210405-1 案例分析作业
    第一周作业
    20210309-2 阅读任务
    20210309-1 准备工作
    编程作业
    阅读任务
    准备工作
  • 原文地址:https://www.cnblogs.com/Ewarm/p/13678139.html
Copyright © 2011-2022 走看看