web高级 - 04 浏览器堆栈内存的底层处理

编译器(把代码解析成为浏览器看得懂的结构):词法解析 / AST抽象语法树 / 构建出浏览器能够执行的代码

引擎(V8引擎,webkit内核): 变量提升 / 作用域、闭包 / 变量对象 / 堆栈内存 / GO、VO、AO、EC、ECStack

let a = { n : 10 };
let b = a;
b.n = 20;
console.log(a.n);   //20
let a = { n : 10 };
let b = a;
b = { n : 20 };
console.log(a.n);   //10

引擎处理流程图: 

面试题:

1、

let a = { n : 10 };
let b = a;
b.m = b = { n : 20 }; //即 c = { n : 20 }    b.m = c      b = c
console.log(a); //{n:10,m:{n:20}}
console.log(b); //{n:20}

2、 

let x = [12,23];
function fn(y){ //即 y = x;
    y[0] = 100;
    y = [100];
    y[1] = 200;
    console.log(y); // [100,200]
}
fn(x); 
console.log(x); // [100,23]

3、

//非严格模式下,arguments和形参之间会建立映射关系
function fn(x,y){
    console.log(x,y,arguments); //10,20,[10,20]
    arguments[0] = 100;
    y = 200;
    console.log(x,y,arguments); //100,200,[100,200]
}
fn(10,20);

 

"use strict";
//"use strict" 必须写在js代码第一行,或者函数内第一行(只对当前函数执行使用严格模式)
//严格模式下,arguments和形参之间 不会 建立映射关系
function fn(x,y){
    console.log(x,y,arguments); //10,20,[10,20]
    arguments[0] = 100;
    y = 200;
    console.log(x,y,arguments); //10,200,[100,20]
}
fn(10,20);
//只传一个参数,arguments[1]不存在,更不存在映射关系
function fn(x,y){
    console.log(x,y,arguments); //10,undefined,[10]
    arguments[0] = 100;
    y = 200;
    console.log(x,y,arguments); //100,200,[100]
}
fn(10);

4、

var x =10;
~ function(x){
    console.log(x); // undefined;
    x = x || 20 && 30 || 40; // &&优先级高于||
    console.log(x); // 30
}();
console.log(x); // 10

5、

let x = [1,2],
    y = [3,4];
~function(x){
    x.push("A");
    x = x.slice(0);
    x.push("B");
    x = y;
    x.push("C");
    console.log(x,y); // [3,4,"C"] [3,4,"C"]
}(x);
console.log(x,y);//[1,2,"A"] [3,4,"C"]

6、

let res = parseFloat('left:200px'); //NaN  
if(res === 200){
    alert(200);
}else if(res === NaN){ //NaN不等于任何值,包括自身
    alert(NaN);
}else if(typeof res === 'number'){ //typeof NaN => 'number'
    alert("number");
}else{
    alert("Invalid Number");
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值