Skip to content

Day4:写出执行结果,并解释原因 #40

@Genzhen

Description

@Genzhen
Collaborator
var a = 1;
(function a () {
    a = 2;
    console.log(a);
})();
// 写出执行结果,并解释原因

每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案
欢迎大家在下方发表自己的优质见解
二维码加载失败可点击 小程序二维码

扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。

Activity

Genzhen

Genzhen commented on Jun 22, 2020

@Genzhen
CollaboratorAuthor

答案

ƒ  a () {
      a = 2;
      console.log(a);
 }

解析
立即调用的函数表达式(IIFE) 有一个 自己独立的 作用域,如果函数名称与内部变量名称冲突,就会永远执行函数本身;所以上面的结果输出是函数本身;

cxs8462

cxs8462 commented on Jul 13, 2020

@cxs8462

受教了

kflizongbao

kflizongbao commented on Jul 19, 2020

@kflizongbao

应该作用域的角度去解释,a是全局作用域,a函数内部自然找不到变量a,所以输出函数a

GolderBrother

GolderBrother commented on Jul 21, 2020

@GolderBrother

立即执行的函数表达式(IIFE)的函数名称跟内部变量名称重名后,函数名称优先,因为函数名称是不可改变的,内部会静默失败,在严格模式下会报错

var a = 1;
(function a () {
    'use strict';
    a = 2;
    console.log(a);
})();
 VM1059:4 Uncaught TypeError: Assignment to constant variable.
    at a (<anonymous>:4:7)
    at <anonymous>:6:3
MillionQW

MillionQW commented on Jun 6, 2021

@MillionQW

这道用函数作用域解释比较合理? a 是在全局环境定义的,IIFE 执行的时候,先找当前作用域下有没有变量 a,此时 a 就是当前函数,所以不用继续往上一层作用于继续寻找了,所以打印了函数本身。
所以如果变量 a 是在 IIFE 里定义的话,就会输出新变量 a:

var a = 1;
(function a() {
 var a = 2;
 console.log(a)  // 2
})()
zhujianxiong

zhujianxiong commented on Jun 8, 2021

@zhujianxiong

严格模式下会报错

为啥严格模式下会报错呢?

SnailOwO

SnailOwO commented on Nov 16, 2021

@SnailOwO
1. 打印结果内容如下:
ƒ a() {
   a = 2;
   console.log(a)
}
2. 原因:

> 作用域可以理解为执行上下文中申明的变量和作用的范围;包括块级作用域/函数作用域;

> 变量提升:一个声明在函数体内都是可见的,**函数声明优先于变量声明;**

> 在非匿名自执行函数中,函数变量为只读状态无法修改;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @kflizongbao@Genzhen@SnailOwO@MillionQW@GolderBrother

        Issue actions

          Day4:写出执行结果,并解释原因 · Issue #40 · lgwebdream/FE-Interview