我们继续学习有关函数的知识:
函数返回值
一个函数执行完毕需要返回具体的信息,使用return关键字返回信息。
在一定层度上看,全部的数据类型(数值、字符串、布尔、对象、null)信息都可以返回
return本身还可以结束函数的执行。
在一个函数内部,可以声明数值、字符串、布尔、对象等局部变量信息,言外之意就还可以声明函数(函数内部还要嵌套函数),因为函数也是对象。(在javascript里边,一切都是对象。)
在PHP中,虽然函数不是对象,它也可以在函数内定义一个函数。如:
function a(){
function b(){
echo 'this b';
}
b();
}
a();
只要a函数被执行了,相当于b函数被声明定义了,在代码的任何地方都可以使用这个b函数。
唯一不同的是,在JS中函数是对象,所以函数里的函数可以被return给返回出来。PHP中是不可以的。
函数调用
1)传统方式调用
函数名([实参1][,实参2][,实参3][,……]);
2)匿名函数自调用
(function(){})();
PHP是不支持这样写法的。
用这种方式第一眼感觉有点啰嗦了,JS就是这么“搞怪”,这就是JS的编程风格。
题外话:
楠神前面说过:“JS要比PHP难!”,等我们逐步学习JS,你就会发现两种语言编程风格上完全不一样。PHP被称为最简单好学的编程语言,并不是说PHP的内容少,而是因为PHP的知识体系、编程风格更容易学会,被人接受。
如果我们把PHP的编程风格拿来写JS代码,顶多可以用JS做验证,写个特效什么的,根本没法做真正的JS开发。让大家看一个JS代码:
密密麻麻的,这可比PHP代码阅读起来难多了。为了不让别人容易阅读、为了节省JS文件大小,JS开发者都喜欢把JS代码中的“换行”去掉,让代码紧挨着。
3)callee方法
PHP中有个魔术常量__FUNCTION__,如果在函数里调用自己,可以借助这个魔术常量。
JS中,arguments对象callee方法也可以实现在函数里调用自己。
本节学习代码中有示例,不演示了。
指的是变量作用域问题。在PHP中,全局变量(函数外)局部变量(函数内)是相互独立不受影响的。在JS下,却不再是这样的了。
全局变量:
可以在网页的任何地方(函数内部和函数外部),都能使用的变量,称为“全局变量”。
一般情况下,在函数外部定义的变量,称为“全局变量”。
生存周期:在网页关闭后,全局变量将消失了。
局部变量:
只能在函数内部使用的变量,称为“局部变量”。
局部变量,在函数外无法使用。
生存周期:在函数执行完毕后,局部变量就消失了。
确切地说,在大括号{}里定义的变量是“局部变量”,不光是在函数,在for循环里也能定义“局部变量”。
看下面这样一个例子:
看代码,感觉全页只有一个变量“name”。其实不是的,有两个变量,一个是全局变量“name”,另一个是getInfo函数内的局部变量“name”。
通过这个示例可引申出以下几个知识点:
1)在函数内可以访问全局变量(22行代码),在函数外不可以访问局部变量(24行代码)
2)函数内怎么定义局部变量?一定要使用var命令。如果不用的话,实际上声明了一个全局变量!
3)建议函数内的局部变量最好不要与函数外的全局变量同名。一旦重名,局部会屏蔽全局。要用全局变量,需要使用"::"。
4)我们知道函数内可以定义函数,也就是局部变量里嵌套着局部变量,它们的作用域符合这样的原则“内部环境可以访问外部环境的变量,反之不然”。这就是Javascript语言特有的“链式作用域”结构(chain scope)
子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。