JavaScript进阶教程之函数的定义、调用及this指向问题详解

目录
  • 前言
  • 一:函数的定义
    • 1.1 命名函数
    • 1.2 匿名函数
    • 1.3 利用 new Function() 声明函数
    • 1.4 重要结论
  • 二:函数的调用
    • 2.1 普通函数调用
    • 2.2 立即执行函数调用
    • 2.3 对象内方法调用
    • 2.4 构造函数调用
    • 2.5 事件函数的调用
    • 2.6 定时器函数的调用
  • 三:各类函数的内部this指向问题
  • 总结

前言

这篇文章开始我们函数的进阶篇,和我们JavaScript基础学的函数有了很多拓展,这篇文章首先我们从函数的定义,调用,及其 this指向 来一个总结。

一:函数的定义

函数的定义共三种方式:1.命名函数,2.匿名函数,3.利用 new Function() 来创建。

1.1 命名函数

命名函数就是我们最常见的声明函数的方式,也叫做自定义函数

    <script>
        function fn(){
            console.log('我是命名函数');
        }
        fn()
    </script>

1.2 匿名函数

匿名函数即没有名字的函数,匿名函数的调用需要使用立即执行函数,绑定事件时使用的也是匿名函数

    <script>
    //立即执行函数来调用匿名函数
       (function(a,b){
           console.log(a+b);
       })(1,2)

    //绑定事件来使用匿名函数
       var div1=document.querySelector('div')
       div1.addEventListener('click',function(){
         console.log('我是绑定事件使用的匿名函数');
       })
    </script>

1.3 利用 new Function() 声明函数

还有一种不常见的函数声明方法是 new Function(),这个办法我们知道是个构造函数。但是由于这种方式比较繁琐麻烦,并且如果执行函数还需要转化语言格式为可识别的脚本语言,因此不使用这种方式声明函数,只需要知道 所有的函数都是Function构造函数的实例化对象(后面结论会说)

参数格式为:

new Function(‘参数一’,‘参数二’,‘参数三’,...... ,‘函数体)

(注意参数全部为字符串形式)

    <script>
         var fn=new Function('a','b','console.log(a+b)')
         fn(2,3)
    </script>

1.4 重要结论

通过刚才的第三种函数的声明方法,是个构造函数,我们会想到什么,为什么函数也有构造函数,难道函数也是对象吗?是的那我们接下来验证一下

    <script>
         var fn=new Function('a','b','console.log(a+b)')
         fn(1,3)
         console.dir(fn instanceof Object)
    </script>

结论:

对此我们知道了函数也是对象就可以得到以下关系

函数属于对象所有的函数都是Function构造函数的实例化对象

二:函数的调用

函数的调用分为以下六种情况:

  • 普通函数调用
  • 立即执行函数调用
  • 对象内方法调用
  • 构造函数调用
  • 事件函数调用
  • 定时器函数调用

2.1 普通函数调用

普通函数调用可以直接写函数名调用,也可以使用 call() 方法调用

    <script>
        function fn(){
            console.log('我是一个普通函数的调用');
        }
        fn()
        fn.call()
    </script>

2.2 立即执行函数调用

立即执行函数通常用于匿名函数的调用,立即执行函数是自动调用的

    <script>
        (function(){
            console.log('立即执行函数调用了');
        })()
    </script>

2.3 对象内方法调用

对象内方法调用只需要  :实例化对象名称.方法名称

    <script>
        var obj={
            fn:function(){
                console.log('对象内的方法调用了');
            }
        }
        obj.fn()
    </script>

2.4 构造函数调用

构造函数的调用只需要 new实例化对象就可调用

    <script>
        function Animal(){}
        new Animal()
    </script>

2.5 事件函数的调用

事件对象调用需要触发事件就可以调用

    <script>
       var div1=document.querySelector('div')
       div1.addEventListener('click',function(){
         console.log('事件对象调用了');
       })
    </script>

2.6 定时器函数的调用

定时器内的函数为时间到后自动调用

    <script>
      window.setInterval(function(){
        console.log('定时器函数触发了');
      },1000)
    </script>

三:各类函数的内部this指向问题

函数内部的 this 指向谁,是由我们调用时才知道的,一般情况是指向函数的调用者,下面是上一板块出现的几类函数的this指向

函数类型 this 的指向

普通函数调用

window

立即执行函数调用

window

对象内方法调用

该方法的所属对象

构造函数调用

通过构造函数创建的实例化对象

事件函数调用

绑定事件的对象

定时器函数调用

window

总结

到此这篇关于JavaScript进阶教程之函数的定义、调用及this指向问题详解的文章就介绍到这了,更多相关js函数定义调用及this指向内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaScript函数的调用以及参数传递

    JavaScript 函数调用 JavaScript 函数有 4 种调用方式. 每种方式的不同方式在于 this 的初始化. this 关键字 一般而言,在Javascript中,this指向函数执行时的当前对象. Note 注意 this 是保留关键字,你不能修改 this 的值. 调用 JavaScript 函数 函数中的代码在函数被调用后执行. 作为一个函数调用 实例 function myFunction(a, b) { return a * b; } myFunction(10, 2)

  • js中this的指向问题归纳总结

    前言 js中this指向问题是个老生常谈的问题了,下面这篇文章再来给大家介绍下,大家可以看看,更深入的了解了解,下面话不多说了,来一起看看详细的介绍吧 this this:上下文,会根据执行环境变化而发生指向的改变. 1.单独的this,指向的是window这个对象 alert(this); // this -> window 2.全局函数中的this function demo() { alert(this); // this -> window } demo(); 在严格模式下,this是

  • js中匿名函数的创建与调用方法分析

    本文实例分析了js中匿名函数的创建与调用方法.分享给大家供大家参考.具体实现方法如下: 匿名函数就是没有名字的函数了,也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值,很多新手朋友对于匿名函数不了解.这里就来分析一下. function 函数名(参数列表){函数体;} 如果是创建匿名函数,那就应该是: function(){函数体;} 因为是匿名函数,所以一般也不会有参数传给他. 为什么要创建匿名函数呢?在什么情况下会使用到匿

  • JS函数的几种定义方式分析

    本文实例讲述了JS函数的几种定义方式.分享给大家供大家参考,具体如下: JS函数的定义方式比较灵活,它不同于其他的语言,每个函数都是作为一个对象被维护和运行的. 先看几种常用的定义方式: function func1([参数]){/*函数体*/} var func2=function([参数]){/*函数体*/}; var func3=function func4([参数]){/*函数体*/}; var func5=new Function(); 上述第一种方式是最常用的方式,不用多说. 第二种

  • JavaScript函数的4种调用方法详解

    在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用.函数有四种调用模式,分别是:函数调用形式.方法调用形式.构造器形式.以及apply形式.这里所有的调用模式中,最主要的区别在于关键字 this 的意义,下面分别介绍这个几种调用形式. 本文主要内容: 1.分析函数的四种调用形式2.弄清楚函数中this的意义3.明确构造函对象的过程4.学会使用上下文调用函数 一.函数调用形式 函数调用形式是最常见的形式,也是最

  • javascript定义函数的方法

    JavaScript 使用关键字 function 定义函数. 函数可以通过声明定义,也可以是一个表达式. 函数声明 在之前的教程中,你已经了解了函数声明的语法 : function functionName(parameters) { 执行的代码 } 函数声明后不会立即执行,会在我们需要的时候调用到. 实例 function myFunction(a, b) { return a * b; } 函数表达式 JavaScript 函数可以通过一个表达式定义. 函数表达式可以存储在变量中: 实例

  • js function定义函数的几种不错方法

    js function定义函数的4种方法 1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: 复制代码 代码如下: function func(){} 或 var func=function(){}; 2.作为一个类构造器使用: 复制代码代码如下: 复制代码 代码如下: function class(){} class.prototype={}; var item=new class(); 3.作为闭包使用: 复制代码代码如下: 复制代码 代码如下: (function(){ //

  • javascript 定义初始化数组函数

    方法一.js数组的定义与初始化 定义一维数组 方法1: var _TheArray = new Array();//定义 _TheArray[0]="1"; _TheArray[1]="2"; _TheArray[2]="3"; //初始化 方法2: var _TheArray = new Array("1","2","3");//直接定义并初始化 定义二维数组 方法1 var _The

  • JS定义函数的几种常用方法小结

    本文实例讲述了JS定义函数的几种常用方法.分享给大家供大家参考,具体如下: 在 JavaScript 语言里,函数是一种对象,所以可以说函数是 JavaScript 里的一等公民(first-class citizens). 之前我们这样定义过一个函数: function greet(greeting, name) { return `${greeting}, ${name}` } 因为在 JavaScript 里面是对象(object),所以它会有一些属性还有方法.比如 name 属性是函数的

  • js中的this的指向问题详解

    this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的 普通函数中的this指向: 情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找. 情况2:如果一个函数中有this,这个函

随机推荐