JavaScript 教程

JS 教程 JS 简介 JS 如何使用 JS 输出 JS 语句 JS 语法 JS 注释 JS 变量 JS 运算符 JS 算法 JS 赋值 JS 数据类型 JS 函数 JS 对象 JS 事件 JS 字符串 JS 字符串方法 JS 数值 JS 数值方法 JS 数组 JS 数组方法 JS 数组排序 JS 数组迭代 JS 日期 JS 日期格式 JS 日期获取方法 JS 日期设置方法 JS 数学运算 JS 随机数 JS 布尔运算符 JS 比较运算符 JS 条件语句 JS Switch 语句 JS For 循环 JS While 循环 JS Break JS 类型转换 JS 位运算符 JS 正则表达式 JS 错误处理 JS 作用域 JS Hoisting JS 严格模式 JS this 关键词 JS Let 关键词 JS Const 关键词 JS 箭头函数 JS 类 JS 调试 JS 样式指南 JS 最佳实践 JS 常见错误 JS 性能优化 JS 保留关键词 JS 版本 JS ES5 JS ES6 JS JSON

JS 表单

JS Forms Forms API

JS 对象

Object 对象定义 Object 对象属性 Object 对象方法 Object Display Object 对象访问器 Object 对象构造器 Object 对象原型 Object ECMAScript 5

JS 函数

JS 函数定义 JS 函数参数 JS 函数调用 JS Call 函数 JS Apply 函数 JS 函数闭包

JS 类库

Class 类简介 Class 类继承 Class Static

JS 异步

JS 回调 JS 异步 JS Promises JS Async/Await

JS HTML DOM

DOM 简介 DOM 方法 DOM 文档 DOM 元素 DOM HTML DOM CSS DOM 动画 DOM 事件 DOM 事件监听 DOM 导航 DOM 节点 DOM 集合 DOM 节点列表

JS 浏览器 BOM

JS Window JS Screen JS Location JS History JS Navigator JS 弹出框 JS Timing JS Cookies

JS AJAX

AJAX 简介 AJAX XMLHttp AJAX 请求 AJAX 响应 AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用程序 AJAX 实例

JS JSON

JSON 简介 JSON 语法 JSON vs XML JSON 数据类型 JSON 解析 JSON 字符串化 JSON 对象 JSON 数组 JSON PHP JSON HTML JSON JSONP

JS Web APIs

Web API 简介 Web History API Web Storage API Web Geolocation API

JS vs jQuery

jQuery 选择器 jQuery HTML jQuery CSS jQuery DOM

JS 实例

JS 实例 JS HTML DOM JS HTML 输入 JS HTML 对象 JS HTML 事件 JS Browser JS 编辑器 JS 练习 JS 测验

JS 参考手册

JS 对象 HTML DOM 对象



JavaScript 函数调用

JavaScript function 函数内部的代码会在"某物"调用它时执行。


调用 JavaScript 函数

在函数被定义时,函数内部的代码不会执行。

在函数被调用时,函数内部的代码会被执行。

调用函数通常也可以说"启动函数"或"执行函数"。

在本教程中,我们使用"调用"。


以函数形式调用函数

实例

function myFunction(a, b) {
  return a * b;
}
myFunction(10, 2);           // 将返回 20
亲自试一试 »

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

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

在浏览器中,这个页面对象就是浏览器窗口。上面的函数自动成为一个窗口函数。

myFunction() 和 window.myFunction() 是同一个函数:

实例

function myFunction(a, b) {
  return a * b;
}
window.myFunction(10, 2);    // 也将返回 20
亲自试一试 »

这是调用函数的常见方法,但并不是一个好习惯。

全局变量、方法或函数很容易在全局对象中产生命名冲突和漏洞。



this 关键词

在 JavaScript 中,被称为 this 的事物,指的是"拥有"当前代码的对象。

this 的值,在函数中使用时,是"拥有"该函数的对象。

请注意 this 并不是变量。它属于关键词。您无法改变 this 的值。

提示: 阅读更多关于 this 关键字的信息。


全局对象

当不带拥有者对象调用对象时,this 的值成为全局对象。

在 web 浏览器中,全局对象就是浏览器对象。

本例以 this 的值返回这个 window 对象:

实例

var x = myFunction();            // x 将是 window 对象

function myFunction() {
  return this;
}
亲自试一试 »

调用一个函数作为一个全局函数,会导致 this 的值成为全局对象。

作为变量来使用 window 对象很容易使程序崩溃。


作为方法来调用函数

在 JavaScript 中,您可以把函数定义为对象方法。

下面的例子创建了一个对象(myObject),带有两个属性(firstName 和 lastName),以及一个方法(fullName):

实例

var myObject = {
  firstName:"John",
  lastName: "Doe",
  fullName: function () {
    return this.firstName + " " + this.lastName;
  }
}
myObject.fullName();         // 将返回 "John Doe"
亲自试一试 »

fullName 方法是一个函数。该函数属于对象。myObject 是函数的拥有者。

被称为 this 的事物,是"拥有"这段 JavaScript 代码的对象。在此例中,this 的值是 myObject。

测试一下!修改这个 fullName 方法来返回 this 的值:

实例

var myObject = {
  firstName:"John",
  lastName: "Doe",
  fullName: function () {
    return this;
  }
}
myObject.fullName();          // 将返回 [object Object](所有者对象)
亲自试一试 »

以对象方法来调用函数,会导致 this 的值成为对象本身。


通过函数构造器来调用函数

如果函数调用的前面是 new 关键字,那么这是一个构造函数调用。

它看起来像你创建一个新的函数,但由于 JavaScript 函数是对象,你实际上创建一个新对象:

实例

// 这是一个函数构造函数:
function myFunction(arg1, arg2) {
  this.firstName = arg1;
  this.lastName  = arg2;
}

// 这将创建一个新对象
var x = new myFunction("John", "Doe");
x.firstName;                             // 将返回 "John"
亲自试一试 »

构造器调用会创建新对象。新对象会从其构造器继承属性和方法。

this 的值会成为调用函数时创建的新对象。

构造器内的 this 关键词没有值。