美文网首页
33,下面的代码打印什么内容

33,下面的代码打印什么内容

作者: r8HZGEmq | 来源:发表于2019-12-09 10:43 被阅读0次
    var b = 10;
    (function b(){
        b = 20;
        console.log(b); 
    })();
    

    IIFE: 立即执行函数表达式的由来。
    1,相对其他面向对象语言,JS的作用域控制手段很匮乏,只有全局作用域很函数作用域。块级作用域是ES6以后才出现的
    2,既然只有函数作用域scope,那么需要隔离一些变量的时候,就用function来隔离吧
    3,虽然封装一个函数绝大多数是为了,复用。但是js中却多了一个目的,为了隔离。
    4,既然只运行一次,就立即执行吧。
    5,既然立即执行,后面也不会再调了,那函数名也不要了吧。
    6,普通的函数是声明式函数Function,而IIFE是()开头。JS不会认为他是声明Function

    上面:
    作用域:执行上下文中包含作用域链:
    在理解作用域链之前,先介绍一下作用域,作用域可以理解为执行上下文中申明的变量和作用的范围;包括块级作用域/函数作用域;
    特性:声明提前:一个声明在函数体内都是可见的,函数声明优先于变量声明;
    在非匿名自执行函数中,函数变量为只读状态无法修改;

    所以下面这个,只读函数变量,是没问题的。
    var b = 10;
    (function b(){
        'use strict'
        console.log(b); 
    })();
    
    但是下面这个,想更改自执行函数变量b,会报错
    var b = 10;
    (function b(){
        'use strict'
         b = 20;
        console.log(b); 
    })();
    
    'use strict'必须放在第一行,不然整个区块无效,不会使用严格模式。ES5

    相关文章

      网友评论

          本文标题:33,下面的代码打印什么内容

          本文链接:https://www.haomeiwen.com/subject/sodfgctx.html