起因是知乎看到这样一道题
function Foo() {
getName = function () { alert (1); };
return this;
}
Foo.getName = function () { alert (2);};
Foo.prototype.getName = function () { alert (3);};
var getName = function () { alert (4);};
function getName() { alert (5);}
//请写出以下输出结果:
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();
答案:
function Foo() {
getName = function () { alert (1); };
return this;
}
Foo.getName = function () { alert (2);};
Foo.prototype.getName = function () { alert (3);};
var getName = function () { alert (4);};
function getName() { alert (5);}
//答案:
Foo.getName();//2
getName();//4
Foo().getName();//1
getName();//1
new Foo.getName();//2
new Foo().getName();//3
new new Foo().getName();//3
个人诱惑点解决:在执行 Foo.getName = function () { alert (2);};
的时候,因为函数是引用类型,所以这里的 Foo
其实可以看做一个对象,定义了它其中一个方法。
解析:
函数的引用和函数的调用
函数的调用简单解释为函数的使用
函数中定义的函数,需要return 出来才可以使用。
function fn() {
fn1 = function() {console.log(1)}
fn2 = function () { console.log(2) };
// console.log(this)
// return this;
return {
fn1: fn1,
fn2: fn2
}
}
fn().fn2()
javascript中变量类型分为值类型(基本数据类型)和引用类型
值类型:String(字符串),Number(数值),Boolean(布尔值),Undefined,Null
值类型的变量会保存在栈内存中
引用类型:Array(数组),Object(对象),Function(函数)
引用类型的变量名会保存在栈内存中,但是变量值会存储在堆内存中