js中函数提升及var变量提示
其中,在javascript中,函数声明及var声明的变量会得到提升。但是函数声明会先于var声明的变量被提升。即便function写在后面。
看下面的例子:
var aa = 221; function aa(){ alert(111); } console.log(aa); //221
说明了函数声明先被提升了。而后面的var aa声明覆盖了aa函数,所以打印出来的是 ------ 221。
上面的语句在浏览器解析的时候其实是这样的。
function aa(){ alert(111); } var aa; aa = 221; console.log(aa);
这里补充一点,函数声明的函数名与普通对象的变量名没有什么区别(高级编程第三版)。说明函数名可以被变量覆盖。
function aa(){ alert(111); } var aa = 221; console.log(aa); //221
这样执行效果也是一样的。
解析:
function aa(){ alert(111); } var aa; aa = 221; console.log(aa);
同时,function也是对象,说明可以在它的身上定义属性和方法。
在它身上定义的方法叫做类方法,或者叫静态方法。
只属于这个类所有。类的实例不能够调用。
例子:
function aa(){ alert(111); } aa.bb = function(){ alert('我是静态方法'); } aa.bb(); //弹出“我是静态方法”
说明函数可以定义方法。
function aa(){ alert(111); } aa.bb = function(){ alert('我是静态方法'); } var a = new aa(); 这句话弹出111,即运行了aa函数。 a.bb(); // Uncaught TypeError: a.bb is not a function(…)
说明在JS中类的实例不能调用类方法。
function aa(){ alert(111); } aa.bb = function(){ alert('我是静态方法'); } aa.c={ cc:5 } console.log(aa.c); //Object {cc: 5}
给函数对象定义属性。