JS this:call, apply, bind 与 严谨模式 DAY65

call, apply

call , apply 立刻执行
bind 不会立刻执行

var nickname = '小鸡公主';
var family = {
    nickname: '皮杰先生',
}
function fn(a,b){
    console.log(this , a ,b);
}
fn(1,2); // window 1 2
// call apply 立刻执行
fn.call(family , 1 ,2); // this 指向变成 family 
// apply 是以 阵列带入
fn.apply(family, [3,4]); // this 指向变成 family 
// bind 不会立刻执行
var fn2 = fn.bind(family,5,6); // this 指向变成 family 
fn2();
var fn2 = fn.bind(family,5,6); 
fn2(1,2); // 不会呈现
var fn2 = fn.bind(family,5);  // 5 1
fn2(1,2);

进阶观念

var name = '小鸡公主';
var family = {
    name: '皮杰先生',
}
function fn(a,b){
    console.log(this , typeof this , a ,b);
}
// 这里的 1 会以建构式呈现
fn.call(1 , 1 ,2); // Number{1} object 1 2
// 这里的 '你好' 会以建构式呈现
fn.call('你好' , 1 ,2); // String{"你好"} object 1 2
// 非严格模式下 若传入 undefined 或 null 会指向 window
fn.call(undefined , 1 ,2); // window object 1 2
fn.call(null , 1 ,2); // window object 1 2

那什麽是严格模式呢??


严格模式 (strict mode)
MDN: https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Strict_mode

  • 加入 'use strict' 即可运作
  • 并不会影响不支援严格模式的浏览器
  • 可依据执行环境设定'use strict'
  • 透过抛出错误的方式消除一些安静的错误
  • 禁止使用一些有可能未来版本 ECMAScript 定义的语法
function fn(a,b){
    'use strict'
    console.log(this , typeof this , a ,b);
}
fn.call(1,1,2); // 1 number 1 2
fn.call(undefined,1,2); // undefined undefined 1 2
fn(1,2); // undefined undefined 1 2
// 简易呼叫的 this 尽可能不要调用,它的本质其实是 undefined

那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷/images/emoticon/emoticon41.gif


<<:  [Golang]同步工具-sync包的RWMutex-心智图总结

>>:  Day41. 备忘录模式

GNU Debugger

GNU Debugger,简称 GDB,是 GNU 软件系统中的除错器,由於其具有可移植的优点,在现...

[Day 26] 从 AsyncPipe 出发,微探讨 Angular 处理 pipe 的流程

昨天介绍了 AsyncPipe 的用法以及它可以带来的便利,今天要来看一下在这方便的背後是由那些东西...

认证因素(Authentication Factor)

-数字身份模型(来源:NIST SP 800 63-3) 刷联系人ID卡并输入PIN码是两步验证。...

22.MYSQL NOT BETWEEN AND指令

除了有BETWEEN AND 之外,还有NOT BETWEEN AND (NOT BETWEEN A...

HTML笔记(00)-为什麽我会想学网页开发?

我是今年刚毕业的新鲜人,选择了离家229公里远的工作, 连我自己都感到很意外,毕竟我是一个非常以家人...