预编译相关-代码题【持续更新】

预编译阶段万能口诀

1.创建了ao对象
2. 找形参和变量的声明,作为AO对象的属性名,值是undefined
3. 实参和形参相统一
4. 找函数声明 会覆盖变量的声明

拓展:AO对象——函数作用域创建阶段,有一个与之对应的叫做JS的变量对象,在函数作用域创建阶段称为AO对象,供JS引擎自己去访问。

题目合集
function fn(a,c) {
    console.log(a); //function a() {}
    var a = 123;
    console.log(a); //123
    console.log(c); //function c() {}
    function a() {} 
    if(false) {
        var d = 678
    }
    console.log(d); //undefined
    console.log(b); //undefined
    var b = function(){} //函数表达式
    console.log(b) //function(){}
    function c() {} //函数声明
    console.log(c) //function c() {}
}
fn(1,2) 
/*** 预编译四步骤
AO:{
    a: undefined 1 function a() {}
    c: undefined 2 function c() {}
    d: undefined 
    b: undefined
}
 */
//js的逐行执行
var b = 10;
(function b(){
    b = 20;
    console.log(b); 
})();
/**
ƒ b(){
    b = 20;
    console.log(b); 
}
*/

延伸:如何改造上面的代码,使之分别打印 10 和 20。

function changeObjProperty(o) {
  o.siteUrl = "http://www.baidu.com"
  o = new Object()
  o.siteUrl = "http://www.google.com"
} 
let webSite = new Object();
changeObjProperty(webSite);
console.log(webSite.siteUrl); //"http://www.baidu.com

传进函数的是原对象的地址(或者说引用),这个地址赋值给了形参(形参看做局部变量),形参变量此时指向原对象,后面o=new
object的时候,形参变量保存的是新对象的地址,指向的是新的对象,所以第二次的o.siteUrl
也是给这个新对象属性的赋值,和旧对象无关。最后打印website.SiteUrl
的时候,访问的是旧对象,因为前面的改动都只涉及到形参变量,和website无关,website依然保存着旧对象的引用。

其他
var a = {}
var b = 2
a[b] = 3
console.log(a) // { 2: 3 }
var a = {}
var b = [1,2] 
a[b] = 3
console.log(a)  //{1,2: 3}
var a = {}
var b = []
console.log(a)  //{}
var a = {}
var b = {}
a[b] = 3
console.log(a) //{[object Object]: 3}
// example 1
var a={}, b='123', c=123;  
a[b]='b';
a[c]='c';  
console.log(a[b]); //c

---------------------
// example 2
var a={}, b=Symbol('123'), c=Symbol('123');  
a[b]='b';
a[c]='c';  
console.log(a[b]); //b

---------------------
// example 3
var a={}, b={key:'123'}, c={key:'456'};  
a[b]='b';
a[c]='c';  
console.log(a[b]); //c
['10','10','10','10','10'].map(parseInt);
// [10, NaN, 2, 3, 4]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咩咩羊10

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

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

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

打赏作者

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

抵扣说明:

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

余额充值