之前我们有说过,再调用函式的时候,浏览器会传递隐藏的参数给我们函式
一个是「this」,除了 this 还有另一个参数是「arguments」,
我们都知道全域函式直接调用的话,this 会指向 window
。
但其实函式有方法给我们绑定 JavaScript 中的「this」
这是 ES6 新增的函式,叫做「箭头函式表达式」,看到表达式就知道可以直接赋值。
用法其实跟用宣告的函式很像!
const normal = function(){} // 普通宣告函式
const echo = () => {} // 箭头函式
箭头函式的优点
以加法为例子
const plus = (a, b) => {
return a+b;
}
console.log( plus(1, 2) ); // 3
当执行程序码只有一行时,可以省略大括号与 return
const plus = (a, b) => a + b;
console.log( plus(1, 2) ); // 3
是不是觉得很精简,跟魔法一样!
平常直接调用函式,this 的指向会朝 window 这个物件
function echo () {
console.log( this );
}
echo() // window
但当我们利用 call()
或 apply()
方法,第一个参数设为物件,就可以把 this 指向该物件
const obj = {};
echo.call(obj); // {}
echo.apply(obj); // {}
除了第一个要传递物件外,也能正常的传递参数,只是传递参数的型别不太一样。
call
,第一个参数为 this 指向,後面参数正常带入就可以了apply
,第一个参数为 this 指向,第二个参数必须使用阵列,参数放在阵列内
function echo (a, b) {
console.log("a = "+ a);
console.log("b = "+ b);
}
echo.call(null, 1, '我是 b'); // "a = 1" "b = 我是 b"
echo.apply(null, [1, '我是 b']); // "a = 1" "b = 我是 b"
加上之前所认识的,我们更加能掌控我们的 this 了
call
或 apply
方法调用时,this 会指向指定的物件如何知道有这个参数,很简单,直接 console.log()
看看。
function echo () {
console.log(arguments);
}
echo(); // Argument {}
argument 是一个类似阵列的物件,会把我们函式内的参数传递到 arguments 里面保存。
function echo () {
console.log(arguments);
console.log("参数有 "+ arguments.length +"个");
}
echo("a", 1); // { 0: "a", 1: 1 } "参数有 2 个"
这样即使我们函式本身不使用参数,也能透过物件取值的方式 argument[index]
来获取参数
很常使用在参数不确定有几个的时候。
像是把函式内的参数总和取平均值
function average () {
let total = 0;
for(let i = 0; i < arguments.length; i++) {
total += +arguments[i];
}
console.log(total / arguments.length);
}
average(1, 2, 3, 4, 5); // 3
也能使用 callee
来获取执行的函式本身,在配合匿名立即执行函式使用时非常方便。
(function() {
console.log(arguments.callee);
})();
/*
function() {
console.log(arguments.callee);
}
*/
今天又更认识函式的操作方法了,函式是 JavaScript 的精随之一,也更了解如何操控 this 了~
在上一篇文章介绍了有关文字的元素和段落元素,而这一篇会介绍网页中我们常常会看到的图片、影片、音乐、超...
常见的 HTML elements 图片 (img) 想要在网页放上图片,可以使用img标签,他不用...
到目前为止,我们靠着不断尝试和Vertex的帮助之下,顺利地走完一个周期。 了解概论 -> 命...
昨天介绍完支持向量机(Support Vector Machines)和SMO算法,今天就要来实战这...
v-if 条件渲染 Vue 之中还有一个相当实用的功能就是条件渲染了,条件渲染类似於使用 if el...