夜光序言:
若忆能泪下,往事便可作一场作揖的感激,醒来,天依旧清亮,风仍然分明,而光阴的两岸,终究无法以一苇蒹葭收场,我知意,却已相隔。
正文:
通过值传递参数
在函数中调用的参数是函数的隐式参数。
JavaScript 隐式参数通过值来传递:函数仅仅只是获取值。
如果函数修改参数的值,不会修改显式参数的初始值(在函数外定义)。
隐式参数的改变在函数外是不可见的。
通过对象传递参数
在JavaScript中,可以引用对象的值。
因此我们在函数内部修改对象的属性就会修改其初始的值。
修改对象属性可作用于函数外部(全局变量)。
修改对象属性在函数外是可见的。
嗯唔:JavaScript 函数调用
JavaScript 函数有 4 种调用方式。
每种方式的不同在于 this 的初始化。
很帅气~~ this 关键字
一般而言,在Javascript中,this指向函数执行时的当前对象。
我们需要注意一下: this 是保留关键字,你不能修改 this 的值。
嗯唔:作为一个函数调用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>夜光</title>
</head>
<body>
<p>
全局函数 (myFunction) 返回参数参数相乘的结果:
</p>
<p id="demo"></p>
<script>
function myFunction(a, b) {
return a * b;
}
document.getElementById("demo").innerHTML = myFunction(10, 2);
</script>
</body>
</html>
在 HTML 中默认的全局对象是 HTML 页面本身,所以函数是属于 HTML 页面。
在浏览器中的页面对象是浏览器窗口(window 对象)。
以上函数会自动变为 window 对象的函数。
myFunction() 和 window.myFunction() 是一样的:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>夜光</title>
</head>
<body>
<p>哟~~ 全局函数 myFunction() 会自动成为 window 对象的方法</p>
<p>myFunction() 类似于 window.myFunction()</p>
<p id="demo"></p>
<script>
function myFunction(a, b) {
return a * b;
}
document.getElementById("demo").innerHTML = window.myFunction(11, 1);
</script>
</body>
</html>
全局对象
当函数没有被自身的对象调用时 this 的值就会变成全局对象。
在 我们的
web 浏览器中全局对象是浏览器窗口(window 对象)。
这个例子返回 this 的值是 window 对象:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>夜光</title>
</head>
<body>
<p>在 HTML 中 <b>this</b> 的值, 在全局函数是一个 window 对象。</p>
<p id="demo"></p>
<script>
function myFunction() {
return this;
}
document.getElementById("demo").innerHTML = myFunction();
</script>
</body>
</html>
函数作为全局对象调用,会使 this 的值成为全局对象。
记住: 使用 window 对象作为一个变量容易造成程序崩溃。
函数作为方法调用
在 JavaScript 中我们
可以将函数定义为对象的方法。
以下例子创建了一个对象 (myObject), 对象有两个属性 (firstName 和 lastName), 及一个方法 (fullName):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>夜光</title>
</head>
<body>
<p>myObject.fullName() 返回 001 002:</p>
<p id="demo"></p>
<script>
var myObject = {
firstName:"001",
lastName: "002",
fullName: function() {
return this.firstName + " " + this.lastName;
}
};
document.getElementById("demo").innerHTML = myObject.fullName();
</script>
</body>
</html>