网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月05日漏签0天
前端吧 关注:224,668贴子:1,392,689
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1 2 3 下一页 尾页
  • 70回复贴,共3页
  • ,跳到 页  
<<返回前端吧
>0< 加载中...

有大佬帮忙说一下这个题的解题思路吗?

  • 只看楼主
  • 收藏

  • 回复
  • 圈中心
  • 武林高手
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼



  • -鶜-
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
里面function a 提升
所以和外面没关系了 里面玩出花来都不用管
你外面打印就是外面的a 即1


2026-02-05 02:01:18
广告
不感兴趣
开通SVIP免广告
  • -鶜-
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
等等 这个有点奇怪 你function a定义了两次
严格模式会过不了
非严格模式下 浏览器控制台我试了下 居然是4


  • __lu向北
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
思路就是往面试官脸上吐一口几十年的浓痰,然后说面尼嘛呢你会面吗


  • 圣德芬_
  • 武林高手
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不是5吗


  • 小羊吃嫩草ZS
  • 江湖少侠
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
5吧


  • 鬼汐LTO
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这题谁出的啊?看着是5,运行了是4,删掉a=4后面的function a和a=5,结果等于3,又在a=4下面,括号里面打个console.log(a)吧,结果又输出4,给我整不会了


  • Ybb♛
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
那两个大括号是属于谁的


2026-02-05 01:55:18
广告
不感兴趣
开通SVIP免广告
  • -鶜-
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这里有个不确定的是 块级模式下 内部如何去对待function
是视作let 还是var。
来在chrome里跟踪一下看看“ 混杂模式下的表现:
1.这里全局a为1

2.下图这里可以看到function 提升

3.这里执行块级别 赋值a=3

4.这里就很奇怪了 3赋值到了全局 这里表现得像var修饰
因为var没有块级作用域

5.块级a赋值4

6.a=4又赋值到了全局..

7.a=5没有影响到全局?是没有执行吗?

8.修改下,加一行赋值,可以看到这里块级是有赋值5的

9.但是 外部没有受到影响 也就是这里的a表现出的是let修饰特点

从现象来看 大概结论就是 松散模式下 支持let的环境,
function 提升区域内没有修饰的同名变量会被视为var修饰
之后的会被视为let。
但这一行为我没找到具体规范说明做支撑,不确定其它浏览器环境表现是否一致。
ps:如果你试过严格模式 只用一个function a就会看到块级内a是被当作let修饰 外部不影响
去掉严格模式就会发现function a前的都会引用到全局,也就是被当作var对待了


  • 生活不止眼前
  • 武林盟主
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不要在块级作用域里面声明函数,毫无意义的题目


  • 月半木登🍑
  • 江湖少侠
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

如果你看不懂为什么输出是4,那你看我上面这个图只会觉得更抽象。
这个有点复杂,涉及到es5变迁到es6的上古遗留问题,里面包含了变量和函数的提升规则,块级作用域内函数声明提升的映射规则,还有块级作用域的默认变量提升规则。
谈这个问题之前要先了解,在es6出现块级作用域时,因为要考虑到已经发布的老代码兼容问题,所以没办法改变块级作用域内函数的处理规则,所以仍然保留了函数的三种行为方式
即1:允许在块级作用域内声明函数
2:函数声明类似于var,会提升到全局或函数作用域的头部
3:同时,函数声明还会提升到所在块级作用域的头部
块级作用域函数,就像预先在全局作用域中使用var声明了一个变量,且默认值为undefined。
疑难点一:函数声明为什么影响了全局a的赋值

这道题function a并不会直接提升到全局,而是先提升到块级顶部,但问题关键点在于,他是什么时候提升到全局的。
答案是window.a只有等块级作用域中函数声明的定义的那行代码执行过之后,才会被映射到全局作用域。
疑难点二:全局为什么输出的是4而不是5
看图

全局输出的为什么function a(){}? why? 难道不应该是10吗。首先,块级作用域函数a的声明会被提升到全局作用域,然后在块级作用域中,由于声明函数a提升到块级作用域顶端,所以打印a = function a(){},而window.a由于并没有执行函数定义的那一行代码,所以仍然为undefined。当执行到声明函数定义的时候,就会把函数a映射到全局作用域中。当执行a = 10的时候,JS引擎会进行LHS查找,此时,声明函数已经被同时提升到全局作用域和块级作用域顶端了,由于遮蔽效果,此时查找a只会找到块级作用域内的a,并不会找到全局作用域的a,这时,a已经被定义,a = 10只会执行赋值操作,并不会进行提升。
疑难点三:window.a === a为什么一会true一会false
先看图
你可能会觉得诧异,第一个打印不应该是undefined吗?a = 10默认不是 var a = 10吗?应该会提升到全局作用域的顶端的啊。那好,让我们把window.a打印出来看看
发现了吗。默认变量和函数差不多,块级作用域中默认声明的变量,只有执行了声明代码,变量才会被挂载到全局作用域上。
解答:结合上面的内容再看下面这个图

执行a = 10,我们知道,此时,在块级作用域中函数声明已经被提升到顶层,那么此时执行a = 10,就是相当于将函数声明a赋值为10!可以理解吗?然后,执行到函数声明语句,之前说过,块级内函数只有执行到声明的时候才会提升到全局去,此时,虽然这一行代码是函数声明语句,但是a,已经为数字10了,所以,执行function a(){}之后,a的值10就会被赋值给全局作用域上的a,所以下面打印的window.a,a都为10。块级作用域函数只有执行函数声明语句的时候,才会重写对应的全局作用域上的同名变量。这就解答了疑难点三,因为两个window a === a分别位于函数提升之前和函数提升之后,函数提升之后内外a相同,函数提升之前,内部a != 外部a,因为两个变量的值根本就不一样。所以疑难点二也就迎刃而解了,原题为什么最后输出的是4而不是5,因为a=5只赋值了内部的a,并没有被提升。所以这道题本质上是覆写→提升→覆写→提升的过程,因为最后一次提升之前的结果是4,所以外部输出为4,内部a被最后一次覆写为5。如果你想让外部也为5,我想你应该已经知道该怎么做了。


  • 香草吧噗
  • 江湖少侠
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这什么鬼题


  • 贴吧用户_6S5DWK7D9
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这题没意义,不信?你换个浏览器内核。你以为你找到答案了?再换个浏览器内核试试?


  • 洒洒的艾琳
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
js太逆天了


2026-02-05 01:49:18
广告
不感兴趣
开通SVIP免广告
  • 急支糖浆
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
没有意义的面试题


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 3 下一页 尾页
  • 70回复贴,共3页
  • ,跳到 页  
<<返回前端吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示