js call理解

function fn1(){console.log(1);}

function fn2(){console.log(2);}

fn1.call.call.call.call(fn2);//2

解释:

fn2.call( fn1 ) => fn1.fn2()

fn2.call === fn1.call = Function.call,

Function.call.call( fn2 ) => fn2.call() => fn2() //2

fn1.call.call.call.call(fn2)== Function.call.call.call.call(fn2)//2

=》Function.call.call.+n+.call.call(fn2)//2

=》Function.call.call( fn2 )//2 js运行模式

=》fn2.call()//2

=》fn2()// this === null 或 windows

Function.call(fn2)//chrome =>function anonymous() {}

Function(fn2)  //function anonymous() {function fn2(){console.log(2);}}

时间: 2024-10-01 22:42:05

js call理解的相关文章

vue自定义指令(Directive中的clickoutside.js)的理解

.array p { counter-increment: longen; margin-left: 10px } .array p::before { content: counter(longen) "." } .alink { font-size: 16px; color: blue } 阅读目录 vue自定义指令clickoutside.js的理解 回到顶部 vue自定义指令clickoutside.js的理解 vue自定义指令请看如下博客: vue自定义指令 一般在需要 DO

JS闭包理解

Js闭包理解 在很多面试题中都会问什么是js的闭包,为什么需要使用闭包,使用闭包的优缺点! 我在面试其他人的时候也喜欢问这个问题,回答的也是千奇百怪,现在就总结一下我对闭包的理解. 闭包是一种概念,这种概念比较复杂,很多地方的定义不尽相同,我的理解是:闭包是能读取函数内部变量的函数,也就是定义在函数内部的函数,成为函数内部元素与外部沟通的桥梁. 闭包的概念是有js的链式作用域引出来的,所谓链式作用域就是指:内部函数可以读取到所有的外部变量,而外部变量或者函数不能读取到函数的内部变量,变量的作用域

node.js javascript理解原型继承

util.inherits util.inherits(constructor, superConstructor)是一个实现对象间原型继承的函数. JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同.JavaScript 没有提供对象继承的语言级别特性,而是通过原型复制来实现的 var util = require('util'); function Base() { this.name = 'base'; this.base = 1991; this.sayHello =

JS闭包理解_摘

原文地址1:http://www.cnblogs.com/mzwr1982/archive/2012/05/20/2509295.html 闭包是一个比较抽象的概念,尤其是对js新手来说.书上的解释实在是比较晦涩,对我来说也是一样. 但是他也是js能力提升中无法绕过的一环,几乎每次面试必问的问题,因为在回答的时候.你的答案的深度,对术语的理解以及js内部解释器的运作方式的描述,都是可以看出你js实际水平的.即使你没答对,也能让考官对你的水平有个评估.那么我先来说说我对js中的闭包的理解. 闭包是

js深入理解"闭包"

一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function f1(){ var n=999; } alert(n); // error 这里有一个地方需要注意,函数

js prototype 理解

简单理解:prototype对象是实现面向对象的一个重要机制.每个函数也是一个对象,它们对应的类就是 function,每个函数对象都具有一个子对象prototype.Prototype 表示了该函数的原型, prototype表示了一个类的属性的集合.当通过new来生成一个类的对象时,prototype对象的属 性就会成为实例化对象的属性. (类似反射出来的一样) ps.(在JS 里面 全都是对象,  类Function是function的顶级超类,function实例化了叫对象,在funct

js 原型理解(原型对象)

以前在网上搜了一些关于js原型的资料,看了过后,是有一部分理解,但是还不够全面,在这我就写写下关于js的原型. 看了下js高级程序设计,我对js原型的有了一定的理解.里面谈到我们创建对象时,如果一直手写一些相似的对象或者说里面有重复的属性时,会非常麻烦.列如: let a = { name: 'a', idnex: 1 } let b = { name: 'b', idnex: 2 } 为了解决这种问题,就出来了一些能创建对象的模式. //工厂模式 function createObj (nam

关于js循环理解

while   (对循环次数无要求) do...while...  先执行一次循环(不论条件是否满足),在判断条件 for...(知道循环次数的情况下) continue  跳出本次循环 直接进入下次循环 break   结束整个循环 在js语法中 字符串中间不能有换行

js中理解函数作用域的实例

一.Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分).切记,是function块,而for.while.if块并不是作用域的划分标准,可以看看以下几个例子:           1 <script type ="text/javascript" > 2 function test2(){ 3 alert ("before for scope:"+i); // i未赋值(并不是未声明!使用未声

JS消化理解

摘自:http://www.cnblogs.com/zqseven/p/6349236.html JS执行的时候是必须在网页里面执行,和样式表差不多,也是内嵌的样式表,嵌在网页里面或外部的! 一. 嵌在网页里面怎么嵌? 如果你想在网页里面嵌脚本,你需要在网页里面打出一块区域,这块区域来写脚本,在写样式表的时候要写一个标签 脚本里面的标签可以写在网页的任何位置,一般都是写在最底部 我们就写在</body>下面 <script type="text/javascript"