函数
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 对象:
函数作为方法调用:
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 方法修改。
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 方法修改。
相关文章推荐
- Linux常见命令vi和vim有啥区别
- mac系统下android studio 查看SHA1值的方法
- NUMECA介绍
- 联奕公司奕报告集成数据库权限分配
- Redis教程(八):事务详解
- Redis教 4000 程(八):事务详解
- Codeforces Gym 100269F Flight Boarding Optimization 树状数组维护dp
- python groupby
- 字符集与MySQL中文乱码问题(2)
- Cannot load JDBC driver class 'com.mysql.jdbc.Driver
- 9. Palindrome Number
- Two Sum
- 在ubuntu和centos下面安装fcitx[转发]
- swift-学习笔记一《基础》
- HTML中锚点的使用
- Redis教程(七):Key操作命令详解
- HTML中锚点的使用
- Redis教程(七):Key操作命令详解
- Testing Sutdy Bibliography
- LAMP架构搭建与优化(1.7-1.9)