首页 > 语言 > JavaScript > 正文

javascript 函数及作用域总结介绍

2024-05-06 14:33:55
字体:
来源:转载
供稿:网友

在js中使用函数注意三点:

1、函数被调用时,它是运行在他被声明时的语法环境中的;

2、函数自己无法运行,它总是被对象调用的,函数运行时,函数体内的this指针指向调用该函数的对象,如果调用函数时没有明确指定该对象, this 默认指向 window ( strict 模式除外,本文不涉及 strict 模式);

3、函数是一种带有可执行代码的对象类型数据。

一、声明函数

1、使用 function 关键字
代码如下:
function myfun(a,b){ //声明名为myfun的函数

return a+b;

}

2、 声明匿名函数

function(a,b){ return a+b;}匿名函数自身是无法保存的,由于在js中函数是一种对象型数据,因此可以把匿名函数赋给变量来保存。

var myfun = function(a,b){ return a+b;}

3、使用函数构造器Function //注意首字母大写

Function 是js内置的一个函数,他是所有函数对象的构造器。(其他数据对象也有自己的内置构造函数,比如Number,Object等,这些构造函数自己的构造器就是Function,因为他们都是函数)。

var myfun = new Function('a,b','return a+b;'); 其中最后一个参数是函数体,前面的参数都是函数的形式参数名,个数不定,因为需要用字符串传参来构造,函数较长时这种写法很不方便,一般很少用,也许你会用它来构造特定的返回值从而取代 eval函数。

需要注意的是,全局变量和全局函数都可以看作window对象的属性,如果存在同名的函数和变量,只能有一个生效(实际上只有一个属性),试试下面的代码。
代码如下:
function a(){ alert('a');}

alert(window.a);  //访问window对象的属性也可以省去window不写

var a=1;

alert(window.a);

函 数和变量的声明都发生在代码解析期,不同的是,变量在解析期只声明不赋值,因此,同一个作用域内存在同名的函数和变量时,在代码运行期执行到变量赋值之 前,同名函数生效,同名变量赋值之后(用新的数据覆盖了该window对象属性原有的值),变量生效(但是要注意,在firefox 下, 在 with 伪闭包内声明的函数,只能在声明之后才能被调用,即,firefox 的 with 内没有对函数预先声明)。
代码如下:
with({}){
 a();  //在 firefox 下 a 是未声明
 function a(){ console.log("function a is called");}
}

如果同名称的函数被多次声明,后面声明的将覆盖前面声明的,如:
代码如下:
alert(func1);//弹出func1(){alert(2);}

func1(){

alert(1);

}

alert(func1);  //弹出func1(){alert(2);}

func1(){  //这是最后一次声明的func1,以该函数为准

alert(2);

}

alert(func1);  //弹出func1(){alert(2);}

var func1 = function(){  //注意 ,这里是变量赋值,不是函数声明

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选