B: 理解下来感觉像是 形参 被放到 arguments 对象,然后 a 指向 arguments[0]
A: 就好比 const arr = [1] const a = arr[0] arr[0] = 2 a === 1 => true
C: 哇 果然 但是并没有解释到底是如何互相影响的
D: 严格模式参数不会与arguments形成映射,使用es6默认参数自动使用严格模式
D: 非严格模式下arguments虽然和参数是两个独立的,但是会形成映射,一个还另一个会跟着改, 对不对,A?
E: 我啪的 一声就站起来了奥 马老师发生社么事了
第一个是 arguments 本身代表的是函数内置参数,它是一个对象,类数组。
第二个是 不严格模式下,里面的每一个数组元素都定义了 getter setter,而这些实现都是 native code,这就是映射的底层。
所以造成的现象是,在不严格模式时,每次读取arguments,都会代表最新[修改后]的参数。因为 setter 会同步修改函数栈里的参数。
而严格模式,只有 getter ,也就是最初传递进来的参数。
A: 学 JS 这一点 一直让我不爽,想找 native code,只能去翻 V8 源码。
A: 跟我上面中总结的雷同,只不过我用了 getter,setter 抽象了 share 这个概念。
A: 没事,如果真遇到 这种面试题,你说映射 以及在严格模式的差异 就行。
大部分的情况下 模糊数据流的情况 就是副作用函数 和 引用类型了。
说白了,就是 修改了一个引用数据,这就会模糊数据流。
最好从更高的抽象去回答问题, 让面试官 对你印象深刻。
A: 面试嘛,就是个博弈的过程,要懂得表现的机会,要懂得如何通过小动作装出来,最关键是该懂的必须懂。 面试大忌就是 直接回答问题。 一定要说清楚 问题的背景,其代表的意义,业界的探索,最后再说答案,然后加一两句个人观点。
A: 总之就是通过表演把答案回答得更丰满,更立体。