实参,形参,传值,传址的考察
let user = {
name : "a"
}
function getName(user) {
user.name = "b";
user = {
name: "c"
}
console.log("形参是:", user.name);
}
getName(user);
console.log("结果是: ", user.name);
结果是
因为
function getName(user) {
user.name = “b”;
// 这的 user 其实是形参被赋值了, 如果在方法里面创建了一个新的对象,
// 就会 在堆里面创建一个新的栈,而不是去改前面的东西, 所以打印出来的的结果是 b
user = {
name: “c”
}
console.log(“形参是:”, user.name);
}
函数的执行过程
这个是从新开页面到浏览器渲染的过程中
var 在不管判断体中的代码执不执行,都会进行变量提升
函数在判断体中,会函数提升, 但是是只声明,不会定义, 所以在开始打印的foo是一个undefined, 在判断体中, 会创建一个私有的作用域上下文,并同步给全局一份,然后就不会有联系了
只有函数在判断体中才会这个样子
可以去看这个视频 讲的特别的细 连接