Javascript中函数和作用域

来源:互联网 发布:网络域名交易合同骗局 编辑:程序博客网 时间:2024/05/23 14:20
  1. 函数不存在重载,如果两个函数的名字相同,即使参数个数不同,那么这个函数名称只属于后定义的函数。
    function test(a){
        alert("This is a function,"+a);     
      }


    function test()  
    {
      alert("这是一个函数");     

   

test(10);  //  这是一个函数

2. 函数的传递参数的灵活性。函数在定义的时候没有参数,但是使用的时候也可以传入参数;而arguments[0]、arguments[1] 可以用来表示传入的第一个、第二个参数;arguments.length 表示共有多少个参数。

function howManyArgs(){

alert(arguments.length);

}

howManyArgs(1,1); //2

howManyArgs();//0

howManyArgs("blabla") //1

3. Javascript中没有块级作用域,只存在全局环境和每个函数自己的执行环境;如:

for(var i=0;i<10;i++){

doSomething();

}

alert(i);// 10

4. 传递参数,所有函数的参数都是按值传递的,不存在按对象传递。

5.函数声明和函数表达式

函数声明:

alert(sum(10,10));

function sum(num1,num2){

return num1+num2;

}

以上代码完全正常运行。因为在代码开始执行之前,解析器就已经通过一个名为函数声明提升(function declaration hoisting)的过程,读取并将函数声明添加到执行环境中。对代码求值时,Javascript引擎在第一遍声明函数并将它们放到源码树的顶部。

函数表达式:

alert(sum(10,10));

var sum= function(num1,num2){

return num1+num2;

};

以上代码会在运行期间产生错误,在执行到函数所在的语句之前,变量sum 中不会保存对函数的引用;而且,由于第一行代码就会导致“ unexpected identifier"错误,实际上也不会执行到下一行。

6. 函数的属性

每个函数都包含两个属性:length和prototype;

length:表示函数希望接受到的命名参数的个数。

7. 函数的方法

每个函数都包含两个非继承而来的方法:apply() 和 call(). 这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值;

apply() 方法接受两个参数:一个是在其中运行函数的作用域,另一个是参数数组。其中,第二个参数可以是Array实例,也可以是arguments对象

call() 方法与apply() 方法的作用相同,他们的区别仅在于接受参数的方式不同。对于call() 方法而言,第一个参数是 this 值没有变化,变化的是传递给函数的参数必须逐个列举出来。

window.color = "red";var o = {color: "blue"};function sayColor(){   alert(this.color);}sayColor();   //redsayColor.call(this);   //redsayColor.call(window);  //redsayColor.call(o);      //blue

























0 0
原创粉丝点击