Js面试题(关于堆栈内存)

198 阅读1分钟

栈内存

计算机在内部开辟的一个空间,用于浏览器执行js代码,也叫执行环境栈(ECS)

执行上下文

大致分成三类:

  1. 全局执行上下文 全局对象window,简称EC(G)

  2. 函数执行上下文 任何一个函数都有自己特有的执行上下文

  3. 块级执行上下文(Eval) ES6认为由let或const加一个大括号形成的区域,就是一个块级上下文(作用域)

变量对象(VO)

变量对象就是存储某个区块代码中声明的值或变量的

var x = 10;
var y = x;
y = 24;
consoel.log(x)  //10
var x = { n: 10 };
var y = x;
y["n"] = 24;
console.log(x.n)   //24
var x = { n: 10 };
x['n'] = 20;
var y = x;
y = { n: 24};
console.log(x.n)  // 20
var arr1 = [3,4];
var arr2 = arr1;
arr2[0] = 1;
arr2 = [4,5];
arr2[1] = 2;
arr1[1] = 0;
console.log(arr1,arr2)  //[1,0],[4,2]
var x = { n: 10 };
var y = x;
x.x = x = { n: 24 };
console.log(x.x)   //undefined
console.log(y)     //{ n: 10 , x: { n: 24 } }

x.x = x = { n: 24 } ???? 对象通过 . 的形式进行取值或者是添加某个属性的操作,七优先级(19)仅次于圆括号(20);通过 = 的形式赋值的操作,其优先级为3. 故x.x = x = { n: 24 }等同于:

  • x.x = { n: 24 }
  • x = { n: 24 }
var x = [ 10, 24 ];
function f(y){
    y[0] = 30;
    y[1] = 3;
    y = [3,30];
    y[1] = 13;
    console.log(y)  //[3,13]
}
f(x);
console.log(x) //[30,3]
var obj = {
    name: '零度',
    getName: (function(x){
        return x + '冰镇可乐';
    })(obj.name)
}
console.log(obj.getName)  //Uncaught TypeError: Cannot read properties of undefined (reading 'name')