Nodejs 函数 A 在函数 B 中执行的几种方式中实际上有那些区别呢?详情如下:
Nodejs 函数 A 在函数 B 中执行的几种方式中实际上有那些区别呢?详情如下:
//方式一:
function B(callback) {
if(typeof callback === "function") {
callback() ;
}
}
//方式二:
function B(callback) {
if(typeof callback === "function") {
callback.apply(null,arguments) ;
}
}
//方式三:
function B(callback) {
if(typeof callback === "function") {
callback.call(null,arguments[0],arguments[1]) ;
}
}
谢谢大家!
好像跟 this 有关。
装饰器, 2 和 3 的区别就是:
apply 参数是 array ; call 参数按顺序传入
看解释器吧,除了堆栈还有栈的建立退出之外,想不到能有什么区别了
就如何传递参数方面,主要还是看应用场景。
看次问题重点还是要关注函数内 this 指向。callback()
这样在 callback 内的 this 就是全局对象。callback.call(null)
或者 callback.apply(null)
如果是非严格模式, this 也是全局对象,如果是严格模式的话, this 就是 null 了。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
楼上说的对。
另外 1 没有参数
2 可以有任意多个参数
3 只能是两个参数
在Node.js中,函数A在函数B中执行的方式主要可以分为以下几种,每种方式都有其特定的用途和区别:
-
同步调用: 这是最直接的方式,函数A在函数B中被直接调用,并且会阻塞后续代码的执行,直到函数A执行完毕。
function B() { function A() { console.log("A is executed synchronously"); } A(); } B();
-
异步回调: 函数A作为回调函数传递给函数B,函数B在适当的时机(如异步操作完成后)调用函数A。这种方式不会阻塞后续代码的执行。
function B(callback) { setTimeout(() => { callback(); }, 1000); } function A() { console.log("A is executed asynchronously as a callback"); } B(A);
-
Promise: 函数B返回一个Promise对象,函数A作为Promise的then回调执行。这种方式可以更好地处理异步操作,并支持链式调用和错误处理。
function B() { return new Promise((resolve) => { setTimeout(() => { resolve(); }, 1000); }); } function A() { console.log("A is executed using Promise"); } B().then(A);
-
async/await: 函数B使用async声明,函数A在await B()后执行。这种方式使得异步代码看起来更像是同步代码,易于理解和维护。
async function B() { return new Promise((resolve) => { setTimeout(() => { resolve(); }, 1000); }); } async function run() { await B(); A(); } function A() { console.log("A is executed after await B()"); } run();
这几种方式各有优劣,选择合适的方式取决于具体的应用场景和需求。