您的位置:首页 > 其它

函数

2016-02-18 22:57 302 查看
函数声明:

function myFunction(a, b) {
return a * b;
}

ps:分号是用来分隔可执行JavaScript语句。 由于函数声明不是一个可执行语句,所以不以分号结束。

函数表达式:

var x = function (a, b) {return a * b};
var z = x(4, 3);
 ps:函数可以通过一个表达式定义。在函数表达式存储在变量后,变量也可作为一个函数使用。上述函数以分号结尾,因为它是一个执行语句。

自调用函数:(下面是一个匿名自我调用的函数)

(function () {
var x = "Hello!!"; // 我将调用自己
})();

ps:如果表达式后面紧跟 () ,则会自动调用。不能自调用声明的函数。通过添加括号,来说明它是一个函数表达式:

函数是对象:JavaScript 函数有 属性 和 方法。

Arguments对象:

JavaScript 函数有个内置的对象 arguments 对象。argument 对象包含了函数调用的参数数组。

x = findMax(1, 123, 500, 115, 44, 88);

function findMax() {
var i, max = 0;
for (i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}

函数调用:

function myFunction(a, b) {
return a * b;
}
myFunction(10, 2);

以上函数不属于任何对象。但是在 JavaScript 中它始终是默认的全局对象。

在 HTML 中默认的全局对象是 HTML 页面本身,所以函数是属于 HTML 页面。

在浏览器中的页面对象是浏览器窗口(window 对象)。以上函数会自动变为 window 对象的函数。

myFunction() 和 window.myFunction() 是一样的。

ps:这是调用 JavaScript 函数常用的方法, 但不是良好的编程习惯全局变量,方法或函数容易造成命名冲突的bug。

全局对象:

当函数没有被自身的对象调用时, this 的值就会变成全局对象。

在 web 浏览器中全局对象是浏览器窗口(window 对象)。

该实例返回 this 的值是 window 对象:
function myFunction() {
return this;
}
myFunction();


函数作为方法调用:

var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName();

闭包:

JavaScript 变量可以是局部变量或全局变量。私有变量可以用到闭包。

全局变量:

var counter = 0;

function add() {
counter += 1;
}

add();
add();
add();

// 计数器现在为 3

局部变量:

function add() {
var counter = 0;
counter += 1;
}

add();
add();
add();

// 本意是想输出 3, 但事与愿违,输出的都是 1 !JavaScript 内嵌函数可以解决该问题。

JavaScript 支持嵌套函数。嵌套函数可以访问上一层的函数变量。

该实例中,内嵌函数 plus() 可以访问父函数的 counter 变量:

function add() {
var counter = 0;
function plus() {counter += 1;}
plus();
return counter;
}如果我们能在外部访问 plus() 函数,这样就能解决计数器的困境。

闭包:

var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();

add();
add();
add();

// 计数器为 3

变量 add 指定了函数自我调用的返回值。

自我调用函数只执行一次。设置计数器为 0。并返回函数表达式。

add变量可以作为一个函数使用。非常棒的部分是它可以访问函数上一层作用域的计数器。

这个叫作 JavaScript 闭包。它使得函数拥有私有变量变成可能。

计数器受匿名函数的作用域保护,只能通过 add 方法修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: