一 、javaScript函数分类
1、普通函数
function 函数名(){函数体}
调用方式 :函数名()
2、匿名函数
function (){函数体}
调用:一般在做好里面直接调用,相当于整体放进去,如:
setInterval(function (){函数体}){函数体}
3、自执行函数
(function(){})()
自动执行,常用于导入的插件
二、作用域
1、js以函数作为作用域
2、函数的作用域在函数被调用之前,已经创建
3、函数的作用域存在作用域链并且也是被调用之前创建(例如函数套函数链)
x=0
function func() {
var x=1
function inner() {
console.log(x)
}
return inner
}
ret=func()
ret() #打印的是1
4、函数内部局部变量会提前声明
(1)
function fun() {
console.log(xo);
}
fun() //程序会报错
(2)
function fun() {
console.log(xo);
var xo='chen'
}
fun() //会打印undefind
5、总结词法分析顺序例子:
function fun(age){
console.log(age); //function age
var age=32;
console.log(age); //32
function age() {};
console.log(age);//32
}
fun(22)
分析先后顺序:
(1)、形式函数
a、age=undefined
b、age=22
(2)、局部变量
a、age=undefined
(2)、函数声明表达式
a、age=undefined
b、age=function表达式
分析之后拿着 age=function函数体 开始去从上往下执行,所以得出上面的结果
三、面向对象
1、格式
function Foo(n) {
this.name=n;
this.sayName=function () {
console.log(this.name)
}
}
var obj=new Foo('chen')
console.log(obj.name)
obj.sayName();
this:代指对象(相当于python的self)
创建对象时,new 类()
2、python的类的函数自动保存在类中,js中的类自动保存在对象中,浪费内存空间
原型:让需要的js函数保存在类中:
function Foo(n) {
this.name=n;
Foo.prototype={
'sayName':function () {
console.log(this.name)
}}
}
var obj=new Foo('chen')
console.log(obj.name)
obj.sayName();