1、
function test(m) {
// 函数的参数按值传递
// m -> {k: 30}
m = {v: 5}; // m 重写了, 不再跟外层的var m指向同一个地址
// m -> {v: 5}
}
var m = {k:30};
test(m);
alert(m.v); // undefined m -> {k:30}
2、
var m1 = {v: 5};
var m2 = m1;
m2 = { s:8, k: 9}; // m2重写了,不再跟m1指向同一个地址
console.log(m1); // {v: 5}
console.log(m2); //{ s:8, k: 9}
3、
function test(m) {
// 函数的参数按值传递
// m -> {k: 30}
m.q = 6;
// m -> {k: 30, q: 6}
}
var m = {k:30};
test(m);
alert(m.q); //6
4、
if(!("userName" in window)) {
var userName = "Tom";
}
console.log(userName); // undefined
// 变量提升,变量存在,不执行if内的语句
5、函数的形参与函数内部声明的变量重名
// 函数内部声明的变量未赋值
function ab(x){
console.log(x); // 3
var x;
console.log(x); // 3
};
ab(3);
// 函数内部声明的变量被赋值,会顶替传进来的参数
function ab(x){
console.log(x); // 3
var x = 4;
console.log(x); // 4
};
ab(3);
6、函数的形参与函数内部声明的函数重名
function ab(x){
console.log(x); // 函数体x
function x(){
console.log("我是函数")
};
console.log(x); // 函数体x
};
ab(3);
function ab(x){
console.log(x); // 3
var x = function(){
console.log("我是函数")
};
console.log(x); // 函数体x
};
ab(3);
7、
var name = 'global';
// 参数就是一个变量声明
function A(name) {
alert(name); // 3
this.name = name;
var name = 1;
}
A.prototype.name = '2';
var a = new A('3');
alert(a.name); // 3
delete a.name;
alert(a.name); // 2
8、
function fun(n, o) {
console.log(o);
return {
fun: function(m) {
return fun(m,n);
}
}
}
var a = fun(0);
a.fun(1);
a.fun(2);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);
c.fun(2).fun(3);
// undefined 0 0
// undefined 0 1 2
// undefined 0 1 2