JavaScript函数有4种调用方式,每种方式的不同之处在于this的初始化

一般而言,在JavaScript中,this指向函数执行时的当前对象

如果函数不属于任何对象,那么默认为全局对象,即HTML页面本身

而浏览器页面对象是浏览器窗口对象,即window对象。此函数会自动变为window对象的函数

因此,从这个层面上来说,myFunction()和window.myFunction()是一样的

function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); // myFunction(10, 2) 返回 20

全局对象:即浏览器窗口,window对象

当函数没有被自身的对象调用时,this的值就会变为全局对象

function myFunction() {
return this;
}
myFunction(); // 返回 window 对象

函数作为方法调用:

创建一个对象,包括两个属性和一个方法,通过调用这个对象来调用方法

<body>
<p id="demo"></p>
<script>
var myObject = {
firstName : "人散",
lastName : "曲终",
fullName : function(){
return this.firstName + " " + this.lastName;
}
}
document.getElementById("demo").innerHTML = myObject.fullName();
</script>
</body>

使用构造函数调用函数:

使用new关键字,则调用了构造函数

<body>
<p>该实例中, myFunction 是函数构造函数:</p>
<p id="demo"></p>
<script>
function myFunction(arg1 , arg2){
this.firstName = arg1;
this.lastName = arg2;
}
var x = new myFunction("jo","lo");
document.getElementById("demo").innerHTML = x.firstName;
</script>
</body>

作为函数方法调用函数:

  • 在JavaScript中,函数就是对象。
  • JavaScript函数作为对象有它的属性和方法。
  • call()和apply()是预定义的函数方法,可用于调用函数,两个方法的第一个参数必须是对象本身。
  • call()和apply()的区别在于第二个参数,call传入的是函数的参数,而apply传入的是一个参数数组。

闭包:可以访问上一层函数作用域里变量的函数,即便上一层函数已经关闭。

函数+函数能够访问的自由变量

7 JavaScript函数调用&this关键字&全局对象&函数调用&闭包的更多相关文章

  1. JavaScript在不同环境下的全局对象

    Node.js 环境下,全局的对象是 global. 浏览器下 window === self 而不是 global,今天才发现的,我惊呆了!

  2. JavaScript 全局对象

    全局属性和函数可用于所有内建的 JavaScript 对象. 顶层函数(全局函数) 函数 描述 decodeURI() 解码某个编码的 URI. decodeURIComponent() 解码一个编码 ...

  3. 浏览器端-W3School-JavaScript:JavaScript 全局对象

    ylbtech-浏览器端-W3School-JavaScript:JavaScript 全局对象 1.返回顶部 1. JavaScript 全局对象 全局属性和函数可用于所有内建的 JavaScrip ...

  4. 读书笔记-JavaScript中的全局对象

    对于任何JavaScript程序,当程序开始运行时,JavaScript解释器都会初始化一个全局对象以供程序使用.这个JavaScript自身提供的全局对象的功能包括: 1.全局对象拥有一些常用的属性 ...

  5. JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念

    JavaScript中hoisting(悬置/置顶解析/预解析) 实例解释,全局对象,隐含的全局概念 <html> <body> <script type="t ...

  6. jsContext全局函数调用与对象函数调用、evaluateScript

    evaluateScript:兼具js加载(生成具体的上下文)(函数与通用变量的加载),与函数执行的功能: 函数调用的方式有两种: 1)获取函数(对象),然后执行调用: [context[@" ...

  7. 前端JS面试题汇总 Part 3 (宿主对象与原生对象/函数调用方式/call与apply/bind/document.write)

    原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questio ...

  8. 简述JavaScript全局对象

    全局对象是JavaScript中非常重要的一类对象,它作为程序顶层(程序最顶端,不包括在任何函数之内)的上下文存在,JavaScript中的全局属性.全局函数都是通过全局对象来提供给程序的,比如 全局 ...

  9. JavaScript中的两种全局对象

    这里总结的东西特别适合先学习c/c++, Java这类标准语言再学JS的童鞋们看,因为JS在程序执行之前就会初始化一个全局对象,这个全局对象到底是什么是跟JS程序运行环境有关的. 根据JavaScri ...

随机推荐

  1. Codeforces Round #622 (Div. 2)C2

    题意 N长度为500000以内,一个数字两边的数字不能都比他高,最多高一边 求他最大sum.叙述有问题,直接看样例 3 10 6 8 因为6左右都比他高,选择10 6 6或者6 6  8,sum明显前 ...

  2. Ubuntu系统备份还原教程

    一.备份 很多人有备份系统的习惯,以防系统挂.Windows下可以用DISM创建一个系统镜像,在Ubuntu下,我们可以使用squashfs-tools创建系统镜像. 准备工作 可启动LiveCD一份 ...

  3. Git - 03. git 工作空间

    1. 概述 git 存放代码的地方 2. 创建 命令 # 1. 从无到有 > git init # 2. 从远程拉去现有的仓库 > git clone <url> 3. 文件生 ...

  4. P & R 11

    要做好floorplan需要掌握哪些知识跟技能? 首先熟悉data flow对摆floorplan 有好处,对于减少chip的congestion 是有帮助的,但是也不是必需的,尤其是EDA工具快速发 ...

  5. javacript onclick事件中传递参数

    var user = {id:1, name:'zhangsan'}; var object = '<a onclick="conversion(' + JSON.stringify( ...

  6. LoadRunner通过火狐浏览器录制脚本后,进行回放时,回放脚本很慢

    原因:火狐浏览器在录制的时候,录制了下载插件的脚本 解决办法:在脚本中删除额外资源中的下载代码

  7. 吴裕雄 python 神经网络——TensorFlow 三层简单神经网络的前向传播算法

    import tensorflow as tf w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1)) w2= tf.Variable( ...

  8. EVE扩大虚拟内存

    1.首先通过df -lh命令查看虚拟机的根目录下是否有足够大的硬盘空间. root@eve-ng:~# df -hFilesystem                    Size  Used Av ...

  9. dubbo-admin监控台的搭建

    一.dubbo-admin dubbo-admin是dubbo的控制台web程序,可以利用浏览器对dubbo进行性能监控.服务治理.降级.分组以及一些参数的设置.2.6版本及以前打包后是一个war包, ...

  10. C语言:计算并输出给定10个数的方差。

    //计算并输出给定10个数的方差. #include<math.h> #include<stdio.h> ]) { double p = 0.0,f=0.0,g=0.0; ; ...