重学前端之函数02

举报
dfsafdfsaf 发表于 2021/05/20 11:05:56 2021/05/20
【摘要】 函数调用的几种方式以及不同的调用方式有什么不同定义函数有四种方式,那么函数的调用呢有几种方式呢?不同的调用方式有什么不同呢?上面有说到所有函数调用的时候都会有一个隐式参数 this那么不同的调用方式,this指向有什么不同呢?作为函数进行调用 使用()操作符进行调用,应用了()操作符的表达式//一般说作为函数进行调用我都默认为是全局调用函数 也就是函数前没有任何东西(可能这样的说法不对欢迎大...

函数调用的几种方式以及不同的调用方式有什么不同

定义函数有四种方式,那么函数的调用呢有几种方式呢?不同的调用方式有什么不同呢?上面有说到所有函数调用的时候都会有一个隐式参数 this那么不同的调用方式,this指向有什么不同呢?

作为函数进行调用 使用()操作符进行调用,应用了()操作符的表达式
//一般说作为函数进行调用我都默认为是全局调用函数 也就是函数前没有任何东西(可能这样的说法不对欢迎大佬补充指正)如
function fun(){
    console.log('杨紫666')
}
fun();
//此时的this 指向window

注:函数形成的上下文与在哪里调用无关,而与在哪里声明有关(后面会讲。。。感觉这个提示,额,好像没什么关系。。。)

作为方法进行调用(对象的方法)
var obj = {
    name:'杨紫',
    fun:function(){
        console.log(this.name)//杨紫
    }
    obj.fun();
    //this指向调用对象,也就是.之前的obj
};


构造函数
function Fun(){
    this.name= '杨紫';
    this.age=18;
}
var newP=new Fun();
dir(newP)//自己打印看看吧,看看this是哪个

new  xxx()  ==> typeof xxx 返回‘object’ [注意:new Function() ===> typeof 该类型却是‘function’] 那么new的时候会发生什么事呢?

1、创建一个新对象
2、将构造函数的作用域赋值给了新对象(this指向该新对象)
3、在函数里面添加this.xxx 就是给对象添加新属性
4、返回新对象(如果没有显式返回值,新创建的对象则作为构造器的返回值进行返回)
通过apply/call调用
//语法:
/*apply()方法*/
function.apply(thisObj[, argArray])

/*call()方法*/
function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);


function fun(){
    console.log(this.name)
};
var obj = {
    name:'杨紫'
};
fun.call(obj);

//call/applay会导致fun里面的this指向obj里的this
自执行函数
(function(){})();
function(){}();
+function(){};
~function(){};
-function(){};
//自执行的函数的this都是指向window
var name = 'yz';
       var obj = {
           name: '杨紫',
           fn: (function() {
               console.log('111', this.name)
               return function() {
                   console.log('222', this.name)
               }
           })()
       };
       obj.fn()
  //哦。。你们猜猜 222里面的this 指向的哪个耶 
  • 严格模式 (在严格模式下 自执行函数的this 始终指向 window 即使 自执行函数作为某个对象属性的值 this 始终指向 window )
  • 非严格模式 (在非严格模式下 自执行函数的this 始终为undefined)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。