首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么两个看似相同的JS函数运行方式不同?

两个看似相同的JS函数运行方式不同的原因可能有以下几个方面:

  1. 函数定义方式不同:JS中有多种定义函数的方式,包括函数声明、函数表达式、箭头函数等。不同的定义方式可能会导致函数的作用域、this指向等方面的差异,从而影响函数的运行方式。
  2. 函数调用方式不同:JS中函数的调用方式包括普通函数调用、方法调用、构造函数调用以及使用apply、call等方法进行调用。不同的调用方式会影响函数内部的this指向,以及函数参数的传递方式,从而导致函数运行方式的差异。
  3. 函数闭包:JS中的闭包是指函数可以访问其外部作用域的变量。如果两个函数定义在不同的作用域中,并且其中一个函数引用了另一个函数的变量,那么这个函数就形成了闭包。闭包可能会导致函数的运行方式不同,因为它们对外部变量的访问方式不同。
  4. 函数参数不同:如果两个函数的参数列表不同,那么它们的运行方式也会不同。参数的个数、类型以及传递方式都可能影响函数的运行结果。

需要注意的是,以上只是可能导致两个函数运行方式不同的一些因素,具体情况还需要根据具体的代码来分析。在实际开发中,我们需要仔细检查函数的定义、调用方式以及参数等方面的差异,以确定函数运行方式的不同之处。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JS 匿名函数——几种不同调用方式

函数调用语句,必须放在函数声明语句之后!!!...原因:检查装载时,会先对show变量及这个匿名函数声明,此时,还未将匿名函数赋值给show变量,如果在表达式之前调用,会报错 show is not a function js代码执行顺序问题 js...代码在运行时,会分为两大部分———检查装载 和 执行阶段。...检查装载阶段:会先检测代码语法错误,进行变量、函数声明 执行阶段:变量赋值、函数调用等,都属于执行阶段。 3.自执行函数。这里我总结了8种常用匿名函数调用方法: //1.使用 !...function(){ document.write('ni hao'); }() //2.无法表明函数与之后()整体性,不推荐使用。

4.1K10

了解vue.js生命周期函数四个生命周期函数两个运行事件

了解vue生命周期函数运行中事件,有助于我们更好地使用vue 具体代码文件 生命周期 四个生命周期函数 beforeCreate 第一个生命周期函数,表示实例已经创建,但 data 和 methods...还没有被初始化 created 第二个生命周期函数,能够获取data中数据和methods中方法 beforeMount 第三个生命周期函数,模板已经在内存中编译完成,但尚未渲染到页面中' mounted...第四个生命周期函数, 内存中模板已经渲染到页面,用户可以看到渲染好页面 vue生命周期函数 两个运行事件 可以监听数据变动 运行事件.gif beforeUpdate data中数据已经是最新...,而页面中显示数据还是旧,两者尚未同步 updated 此时,data中数据与页面中数据已经同步更新 如想了解更多vue实例,请查阅我vue笔记目录

79620
  • 107.精读《Optional chaining》

    ,但是大方向基本是相同。...这些语言实现 Optional chaining 差异基本在 语法、支持范围、边界情况处理 等不同,所以如果你每天要在不同语言之间切换工作,看似相同语法,但不同细节可能把你绕晕(所以会语言多,只会让你变成一个速记字典...[expr] 是 Optional Chaning,亦或这是一个普通三元运算语句。 可见,要支持 ?. 这个看似简单语法,在整个 JS 语法体系中要考虑边界情况很多。 即便是 ?....想想你设计功能,写过函数,如果为了图方便,扩大了其功能,终究会带来整体设计混乱,适得其反。 边界情况 - 分组 我们知道,JS 代码可以通过括号方式进行分组,分组内代码拥有更高执行优先级。...语法可以快速满足,因此这个特性讨论也被搁置了。 余下 Q&A 大部分 Q&A 在上面的解读都有提及,下面列出剩余两个 Q&A: 为什么语法是 ?. 而不是 .? ?

    38930

    前端面试题“七连击”(一)

    ● 而用函数表达式创建函数是在运行时进行赋值,且要等到表达式赋值完成后才能调用 所以可以分解为这两个简单问题来看清楚区别的本质 这个区别看似微不足道,但在某些情况下确实是一个难以察觉并且“致命“陷阱...出现这个陷阱本质原因体现在这两种类型在函数提升和运行时机(解析时/运行时)上差异。...而函数表达式值是在JS运行时确定,并且在表达式赋值完成后,该函数才能调用。...之后Foo函数返回值是this,而JSthis问题已经有非常多文章介绍,这里不再多说。 简单讲,this指向是由所在函数调用方式决定。...,一个是this指向问题 我们可以利用下面代码来回顾下这两个知识点 因为JS没有块级作用域,但是函数是能产生一个作用域函数内部不同定义值方法会直接或者间接影响到全局或者局部变量,函数内部私有变量可以用闭包获取

    56570

    精读《JS 引擎基础之 Shapes and Inline Caches》

    火狐使用 Mozilla 引擎有一点点不同,使用了两个优化编译器,先将字节码优化为部分机器码,再根据这个部分优化后代码运行时拿到数据进行最终优化,生成高度优化机器码,如果优化失败将会回退到部分优化机器码...笔者:不同前端引擎对 JS 优化方式大同小异,后面会继续列举不同前端引擎在解析器、编译器部分优化方式。...为什么不同前端引擎会使用不同优化策略呢?...但站在 JS 引擎优化角度去考虑,JS 引擎更希望我们都通过 const a = {} 这种看似最没有难度方式创建对象,因为可以共享 Shape。...4 总结 本文主要介绍了 JS 引擎两个概念: Shapes 与 Inline Caches,通过认识 JS 引擎优化方式,在编程中需要注意以下两件事: 尽量以相同方式初始化对象,因为这样会生成较少

    52210

    less 初体验

    为什么需要 lessCSS 语法虽然简单,但它同时也带来一些问题CSS 需要书写大量看似没有逻辑代码,不方便维护及扩展,也不利于复用造成这些原因本质源于 CSS 是一门非程序式语言,没有变量 /...混合) 嵌套、函数和运算等特性,使 CSS 更易维护和扩展一句话:用类似 JS 语法去写 CSS如上 为什么需要 less、什么是 less(Leaner Style Sheets) 我们先来看一个示例来体验一下不用...CSS 是一门非程序式语言,没有变量 / 函数 / 作用域等概念。...预处理器就是升级版 CSS常见 CSS 预处理器LessSassStylusless 基本使用浏览器中直接运行编写 less 文件引入 less 文件引入 less.js 运行首先来看第一种编写方式...less.css 再引入 less.js,如果 less 代码是写到单独文件中,一定要在服务端环境运行才能生效如上使用方式其实是有性能问题,因为 less 文件内容是在你使用就是用户打开页面的使用去转换成对应

    14900

    console.log分析

    js开发过程中,我们不可避免需要对某些参数状态进行追踪,这个时候就回使用console.log这个函数,但这个简单函数背后你所不知道一面 这个函数最常规使用方式就是在代码任何部分调用console.log...1.png] 这个方式就是我们常见一种变量追踪手法,我愿称之为"面向print"开发 从这个例子来看似乎没什么问题,那么我们让这个变量变得更加复杂一些 testConsole() {...object之后,再用console打开,欸,奇怪了,讲道理应该是不会在第一行就显示带有NAUG这个属性啊,为什么在控制台上面存在呢?...[运行结果2.png] 眼见真不为实 进一步分析 in 判断对象里面有没有这个属性,最好方式就是遍历一遍属性,有就是有,没有就是没有 testConsole() { let yerik...根据作用范围不同可以分为全局作用域和局部作用域,这次遇到问题是在各自作用域内,声明和赋值位置是不是在执行过程中被“优化”过?

    58530

    原生JS灵魂考核, 你能回答出来几题?

    ,数组对象-Array,正则对象-RegExp,日期对象-Date,数学函数-Math,函数对象-Function) 2.说出下面运行结果,解释原因。...为什么? 结论: null不是对象。 解释: 虽然 typeof null 会输出 object,但是这只是 JS 存在一个悠久 Bug。...为什么需要BigInt? 在JS中,所有的数字都以双精度64位浮点格式表示,那这会带来什么问题呢?...明明我只改变了s1play属性,为什么s2也跟着变了呢?很简单,因为两个实例使用是同一个原型对象。 那么还有更好方式么?...这就是面向组合设计方式。 参考出处: ES5实现继承那些事 重学JS系列:聊聊继承 JS最新基本数据类型:BigInt(译) yck前端面试之道

    1.2K20

    (建议收藏)原生JS灵魂之问, 请问你能接得住几个?(上)

    ,数组对象-Array,正则对象-RegExp,日期对象-Date,数学函数-Math,函数对象-Function) 2.说出下面运行结果,解释原因。...为什么? 结论: null不是对象。 解释: 虽然 typeof null 会输出 object,但是这只是 JS 存在一个悠久 Bug。...为什么需要BigInt? 在JS中,所有的数字都以双精度64位浮点格式表示,那这会带来什么问题呢?...明明我只改变了s1play属性,为什么s2也跟着变了呢?很简单,因为两个实例使用是同一个原型对象。 那么还有更好方式么?...这就是面向组合设计方式。 参考出处: ES5实现继承那些事 重学JS系列:聊聊继承 JS最新基本数据类型:BigInt(译) yck前端面试之道

    1.6K11

    记一次破解前端加密详细过程

    后面头说让我们改用发http请求(我第一次接触项目的时候就在想为什么不直接用发http请求这种方式,我猜他也是第一次接触爬虫这个技术领域,没什么经验。...没事,反正技多不压身 ^_^),这种方式稳定且快,但是用Python编写解析脚本时候你就知道进行调试有多烦,虽然可以用PyQuery或者BeautifulSoup这种解析库,但是还是不如写JS脚本在浏览器里调试来得舒服...单步执行走到这一步,有些眉目了,执行到了encode指向匿名函数这,里面代码看似应该是各种加密函数,不用读懂它,因为目标只是执行它,得到相应结果就行了 ? 继续单步: ? 继续... ?...还没有完,这里只是得到了js脚本,所以还需嵌入到Python代码中使用,常规方式有两种:使用Python第三方类库js2py和PyV8这两个都是能都执行jsPython类库,但是我还是推荐使用js2py...时需要填写对应User-Agent,不然服务器进行校验时候还是不会响应,可以猜测服务器中也有一段功能相同代码,它根据请求参数和headers中User-Agent进行加密计算,得到HashCode

    1.9K20

    【redux】详解reactredux服务端渲染:页面性能与SEO

    亟待解决疑问 为什么服务端渲染首屏渲染快?...)) } // 注册中间件函数,每当从客户端接收到请求时候,运行handleRender函数 app.use(handleRender) // 监听3000端口 app.listen(3000...express文档http://www.expressjs.com.cn/4x/api.html 2.我上面的例子和redux官方文档例子大致相同,更详细介绍请看这里:http://redux.js.org...(ReactDOMServer.renderToString和 reactDOM.render联系) 一开始让我感到疑惑就是这两个过程,因为单从代码上看似乎我们做了两次重复渲染,但实际上却并不是这样...保证前后端数据一致性 解决服务端渲染代码中“痛点” 在node环境运行ES6语法和JSX语法——babel-core/register使用 在做服务端渲染时候,让我蛋疼莫过于在server.js

    1.5K70

    前端模块化理解

    /myModel.js'); nameModule.printName(); 不同实现对require时路径有不同要求,一般情况可以省略js拓展名,可以使用相对路径,也可以使用绝对路径,甚至可以省略路径直接使用模块名...require()函数在加载依赖函数时候是异步加载,这样浏览器不会失去响应,它指定回调函数,只有前面的模块都加载成功后,才会运行,解决了依赖性问题。...一样,只不过在模块定义方式和模块加载(可以说运行、解析)时机上有所不同 语法 Sea.js 推崇一个模块一个文件,遵循统一写法 define define(id?...AMD和CMD最大区别是对依赖模块执行时机处理不同,注意不是加载时机或者方式不同。...为什么我们说两个区别是依赖模块执行时机不同为什么很多人认为ADM是异步,CMD是同步(除了名字原因。。。)

    60620

    setImmediate() vs setTimeout() 在 JavaScript 中区别

    ,但它们工作方式不同。...如果你曾经参与过涉及定时器或回调项目,你可能遇到过 setTimeout(),甚至 setImmediate()。乍一看,这两个函数似乎做是同一件事——调度任务以便稍后运行。...但如果你曾经一起运行它们,你可能会注意到一些有趣行为。 尽管它们目的相似,但 setImmediate() 和 setTimeout() 在底层操作方式不同。...它帮助管理非阻塞任务,确保函数可以异步执行。在这些阶段中,有不同队列。对于本次讨论,有两个队列是重要: 宏任务队列:这是 setTimeout 和 setImmediate 等任务所在地方。...为什么 setImmediate 回调会一起运行相同事件循环周期:两个 setImmediate 调用在事件循环同一个周期(或循环)中被放置到宏任务队列中。

    10510

    什么是函数重载?

    前言 函数重载指的是一个作用域内几个函数名字相同但是形参列表不同。这些函数执行操作类似,但是接受形参类型不一样,编译器会根据传递实参类型选择对应函数调用。本文将简单介绍C++中函数重载。...为什么要重载 函数重载在一定程序上可以减轻程序员起名字负担。最常见一个例子就是构造函数重载。...;//两个整型参数构造函数 }; 可以看到,类Test三个构造函数名都为Test。...只有返回值不同 例如下面两个声明只有返回值不同函数名和形参都相同: double calcArea(const Square&); int calcArea(const Square&); //非法...形参列表看似不同,实则相同 例如使用typedef给Triangle起了一个“别名”: typedef Triangle MyTri; double calcArea(const Triangle&);

    2.4K20

    Vue隐藏技能:运行时渲染用户写入组件代码!

    为什么要提渐进式呢?因为渐进式是不需要本地编译,有没有 get 到点!对,就是不需要本地编译,而是运行时编译。...本地编译与运行时编译 用户想通过编写template + js + css方式实现运行时渲染页面,那肯定是不能本地编译(此处编译指将 vue 文件编译为 js 资源文件),即不能把用户写代码像编译源码一样打包成静态资源文件...此时我们就有了一个运行时编译环境 第二步:把用户代码注册到系统中 把代码渲染出来有两个方案 通过 注册组件[5] 方式,把代码注册为 vue 实例组件,注册组件又分 全局注册 和 局部注册 两种方式...retrun result } 组件运行时错误 既然把 js 逻辑交给了用户控制,那么像类型错误,从 undefined 中读值,把非函数变量当函数运行,甚至拼写错误等这些运行时错误就很有可能发生。...renderError,此函数返回了一个函数render,且使用了外层函数renderError两个参数,正常情况下运行是没有问题,type和msg引用(引用计数)会等到render函数执行后才会释放

    3.6K10

    你不知道JavaScript(中卷)二

    进程和线程独立运行,并可能同时运行:在不同处理器,甚至不同计算机上,但多个线程能够共享单个进程内存 3.事件循环把自身工作分成一个个任务并顺序执行,不允许对共享内存并行访问和修改。...通过分立线程中彼此合作事件循环,并行和顺序执行可以共存 4.JS从不跨线程共享数据 5.由于JS单线程特性,函数代码具有原子性,一个函数开始运行,它所有代码都会在另一个函数做生意代码运行前完成...,或者相反,这称为完事运行(run-to-completion)特性 6.同一段代码有两个可能输出意味着存在不确定性,这种不确定性是在函数(事件)顺序级别上,而不是多线程情况下语句顺序级别,这种称为竞态条件...可以把并发看作“进程”级(或者任务级)并行,与运算级并行(不同处理器上线程)相对 2.单线程事件循环是并发一种形式 3.非交互:两个或多个“进程”在同一个程序内并发地交替运行它们步骤/事件时,...,但是其实现方式定义更加良好,对顺序保证性更强:尽可能早将来 F.语句顺序 1.代码中语句顺序和JS引擎执行语句顺序并不一定要一致 七、回调 A. continuation 1.回调函数包裹或者说封装了程序延续

    79920

    探究JS V8引擎下“数组”底层实现

    一、背景 使用 JS 数组时,发现 JS 数组可以存放不同类型元素、并且数组长度是可变。数据结构中定义数组是定长、数据类型一致存储结构。...JS数组竟然如此特殊,这也是为什么标题中数组二字加上了“”原因。带着一脸懵逼,打开V8源码,一探究竟。...二、什么是数组 首先来看下什么是数组,下面的图是维基百科上对于数组定义: 图中有两个关键点,相同类型、连续内存。 这两个关键点先不必深究,继续往下看,下面来解释。...3.相同数据类型 因为数组长度是固定,如果不是相同数据类型,一会存 int ,一会存String ,两种不同长度数据类型,不能保证各自存放几个,这样有悖固定长度规定,所以也要是相同数据类型。...那这就好解释为什么JS数组可以存放不同数据类型,它是个对象嘛,内部也是key-value存储形式。

    1.9K30
    领券