gpt4 book ai didi

javascript - 在nodejs中定义模块变量的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-28 20:24:27 26 4
gpt4 key购买 nike

在 Nodejs 中需要模块时声明变量的最佳方式是什么?不同知名 Node 开发者关注different styles 。例如,TJ Holowaychuk 使用这种风格:

(method1)
var connect = require('connect')
, Router = require('./router')
, methods = Router.methods.concat('del', 'all')
, middleware = require('./middleware')
, View = require('./view');

另一方面,Ryan Dahl 更喜欢这种方式:

(method2)
var express = require('express');
var socketio = require('socket.io');
var bench = require('./bench');

注意:我的问题不是关于样式(在 this gist 中已广泛介绍),而是关于这两种方法中哪一种生成最优化的代码(如果特定于需要模块的情况)。我知道差异不会太大,但我相信这是值得了解的。例如,在 C++ 中,this question得出的结论是,构建过程将从较少数量的解析字符中受益。除此之外,一种方法相对于另一种方法还有其他优点吗?

最佳答案

...which of the two methods produce the most optimized code...

如果 V8 在编译源代码(调试信息除外)时生成的实际机器代码存在差异,我会感到惊讶。我无法相信字符数的差异会对现实世界产生任何影响,而且事实上,一个使用逗号运算符连接多个表达式生成单个语句,另一个生成一系列语句(一个表达/陈述)。这确实只是一种风格。

为此:

// Style 1
var express = require('express')
, socketio = require('socket.io')
, bench = require('./bench');

引擎实际上处理这个:

// Style 1
var express, socketio, bench;
express = require('express'),
socketio = require('socket.io'),
bench = require('./bench');

...例如,声明后跟一个由逗号运算符连接的三个赋值表达式组成的语句。

为此:

// Style 2
var express = require('express');
var socketio = require('socket.io');
var bench = require('./bench');

引擎实际上处理这个:

// Style 2
var express, socketio, bench;
express = require('express');
socketio = require('socket.io');
bench = require('./bench');

...例如,声明后跟三个语句,每个语句各有一个赋值表达式。

在这两种情况下,声明步骤都从初始化中完全删除,这实际上是赋值。进入上下文后,所有使用 var 声明的变量(以及所有函数声明)都会在任何步骤之前在执行上下文的词法环境的绑定(bind)对象中创建条目正在运行的逐步代码。这就是为什么它们有时被称为“吊装”,也是为什么上面的样式在很大程度上与引擎无关。 (更多:Poor misunderstood var)

就分解出声明后生成的语句的差异而言,我怀疑机器代码中是否存在任何真正的差异。

关于javascript - 在nodejs中定义模块变量的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17647380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com