<script type="text/javascript"> var x = 1; var y = 0; var z = 0; function add(n){n=n+1;} y = add(x); function add(n){n=n+3;} z = add(x); s=y+z; </script> 求: y的值是? z 的值是? s的值是? 我相信,肯定有同学会答错,当然,不是说他们不会,而是他们可能太大意了! 我们首先看function add,两个add都没有返回值,而我们知道,没有明确返回值的,全部返回undefined,所以,y和z都会是undefined,那么s自然也就不会是一个数字了,没错,s应该是NaN。 假如我们将题目改一下呢?如下: <script type="text/javascript"> var x = 1; var y = 0; var z = 0; function add(n){return n=n+1;} y = add(x); function add(n){return n=n+3;} z = add(x); s=y+z; </script> 两个function add都有返回值了,那么,y,z,s会是多少呢? 不错,y和z都是4,s是8,为什么y不是2而是4呢?因为在javascript中,直接通过function申明的函数,后面定义的,会影响到之前的引用,如下: <script type="text/javascript"> function x(){alert(2)}; x();//output 3 function x(){alert(3)}; x();//output 3 </script> 如果是通过var来申明的函数会是什么情况呢?我们看看: <script type="text/javascript"> var x = function(){alert(0)}; x();//output 0 var x=function(){alert(1)}; x();//output 1 x();//output 1 </script> 通过var申明的函数,后面定义的并不会影响前面的引用。 如果两种模式混合,又会是什么情况呢? <script type="text/javascript"> function x(){alert(2)}; x();//output 3 var x = function(){alert(0)}; x();//output 0 var x=function(){alert(1)}; x();//output 1 function x(){alert(3)}; x();//output 1 </script> 结果是这样的,你猜到了吗? 通过function定义的函数,后面定义的,照旧影响了前面的引用,但是不能改变通过var申明函数后的引用,反而,通过var申明的函数,改变了后来通过function申明函数之后的引用。 所以,如果: <script type="text/javascript"> var x=function(){alert(1)}; x(); function x(){alert(3)}; x(); </script> 后面的x()出来的也会是1。
for(i=0,j=0; i<10,j<6; i++,j++){ k = i + j; } alert(k); //弹出10 for(i=0,j=0; i<6,j<10; i++,j++){ k = i + j; } alert(k); //弹出18
(function(){var a=b=5})(); console.log(b); console.log(a); 为何b有值,a没有 b=5是全局变量,var a=b是局部变量所以a在外部是访问不到的
var scope = 'global'; var f = function() { console.log(scope); // 输出 undefined var scope = 'f'; } f();
三种强制类型转换:String(),Boolean(),Number();
2种隐式类型:+和-
$arr1=array("dog","cat","bird"); $arr2=array("people","dog","mouse"); $arr = array_unique(array_merge($arr1,$arr2)); var_dump($arr);