一线大厂前端经典面试题JavaScript部分

本文汇集了BAT等一线大厂的前端面试题,深入探讨JavaScript的堆栈内存、闭包作用域、对象(数组)深浅克隆以及EventLoop机制,助你全面掌握JavaScript核心技术。
摘要由CSDN通过智能技术生成

BAT笔试题中几道关于堆栈内存和闭包作用域的问题

let a = {}, b = '0', c = 0;
a[b] = 'JavaScript';
a[c] = 'HTML+CSS';
console.log(a[b]); //HTML+CSS

//原因:对象中属性名不能重复,一般都为字符串属性,字符串属性名跟数字属性名是一样的
let a  = {}, b = Symbol('1'), c = Symbol('1');
a[b] = 'JavaScript';
a[c] = 'HTML+CSS';
console.log(a[b]);//JavaScript

//Symbol的特点是:创建的唯一值。Symbol('1')与Symbol('1')是不相等的
let a = {},
b = {
    n: '1'
},
c = {
    m: '2'
}

a[b] = 'JavaScript';
a[c] = 'HTML+CSS';
console.log(a[b]);//HTML+CSS

//对象做属性名时会通过.toString方法被转换为字符串,而对象转换为字符串后都是"[object, Object]"
// 所以b和c转换为字符串后是一样的。

 

 var test = (function(i){
    	return function(){
        	alert(i*=2);// alert输出结果都会转为字符串
        }
    })(2)
    
    test(5); // '4'
//首先是创建一个自调用函数,在函数中又返回一个函数,这里有闭包产生。
//立即执行函数接收的实参是2,然后返回一个函数。
//这时test是一个无参函数,函数体就是alert(i*=2),由于闭包作用这里的i是立即执行函数的参数i,而立即执行函数执行时传入的参数是2
//当调用test函数时虽然传了个参数5,但由于test是一个无参函数,因此5没有任何作用
//所以最终结果是4,而又因alert会把内容转换为字符串,所以最终alert的是字符串4

                
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值