前端JS基础面试题总结(3)

1.值类型和对象类型的数据有什么不同?

值类型:存在栈内存中,是按值操作
对象类型:存在堆内存中,是按地址操作

2.let与var有什么区别。

let、const:
• 不存在变量提升。
• 只能声明一次,不能重复声明
• 变量声明出来存在VO(变量对象)或AO(活动对象)中,不会给window增加属性
var:
• 有变量提升
• 在全局中声明的变量,会给window增加一个属性。

3.简要描述一下变量提升机制。)

当栈内存(作用域)形成,js代码执行之前,浏览器会把所有带有var/function关键词的进行提前‘声明’或者‘定义’,这种预先处理机制称之为‘变量提升’。

4.函数的上级作用域由什么决定?)

由函数创建(定义)的位置决定

5.什么是闭包?

• 一个不销毁的作用域
• 变量的一种保护/保存机制,保护私有变量不受外界影响

6.函数和箭头函数的区别

普通函数有arguments,有this
箭头函数没有arguments;没有自己的this,this由创建所在的执行上下文决定;没有prototype,不能被new执行

7.下面代码是否可以,每隔1000MS依次输出 0 1 2 3 4 5 ?
如果不可以,说明为啥?
以及如何解决?

for (var i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i);
}, (i + 1) * 1000);
}

不能。var i是全局的i,当setTimeout执行的时候i已经是5了。
var改成let,或者写闭包

for (var i = 0; i < 5; i++) {
     setTimeout(function (i) {
        console.log(i);
     }, (i + 1) * 1000, i);
 }
或
var fn = function fn(i) {     
return function () {
     console.log(i);
 };
};
for (var i = 0; i < 5; i++) {
    setTimeout(fn(i), (i + 1) * 1000);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南笙前端工程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值