您的位置:首页 > Web前端 > JavaScript

js函数

2015-10-20 21:50 801 查看
函数

1.定义方式

1)声明式:

function text(x,y) {

return x+y;

}

//声明式已定义,解析时优先执行

2)表达式:

var text = function (x,y) {

return x+y;

};

//解析时先解析变量名,后执行赋值

3)对象式:

var text = new Function("x","y","return x+y");

//调用方式:变量名();

2.立即调用的函数

//匿名函数,只能应用一次,两种定义方式

1)(function (x,y) {

return x + y;

})(1,2)

2)(function (x,y) {

return x + y;

}(1,2))

3.作用域

var a = 1;

var b = 2;

function fn(){

var b = 3;

console.log(b); //输出3

fn1();

function fn1() {

console.log("inner"); //输出inner

}

console.log("inner "+b); //输出inner 3

}

console.log("outer "+b); //输出2

fn();

//全局变量作用于整个script,而局部变量只能作用于定义该变量的函数体,二者同名时,局部变量在自己的势力范围内会覆盖全局变量。

4. 解析

function fn(){

console.log(1);

}

var fn = function(){

console.log(2);

} ;

fn();

//运行结果为2,一个声明式,一个表达式,二者重名时,声明式在由于已经定义,在解析时就开始执行函数体内部的语句,而表达式先解析变量名,后进行赋值,将覆盖声明式的输出结果。

5.作用域案例

var a = 1;

var fn = function() {

console.log(a);

};

function fn1() {

var a = 2;

fn();

}

fn1();

//运行结果为1,函数体内部的变量,在声明时就已经确定了它的作用域

6.传值参数

var x = 1, y = 2;

function fn(x,y) {

x = 2;

y = 3;

}

fn(x,y);

console.log(x+""+y)

//输出结果为12,针对原始数据类型,将其值传递

7.传址参数

var arr = [1,2,3];

function fn(arr) {

arr[0] = 4;

arr[1] = 5;

arr[2] = 6;

}

fn(arr);

console.log(arr)

//运行结果为[4,5,6]

var arr = [1,2,3];

function fn(arr) {

arr = [4,5,6];

}

fn(arr);

console.log(arr)

//运行结果为[1,2,3]

//数组名保存为栈,且为第一个元素的地址,内部元素保存以堆的形式。针对引用类型,为址传递。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: