偶然发现了这个“功能”,其实它正是我想要的,但是不知道它是合法的还是一个bug。我在include文件中做了什么:
// var <- var is now a comment
ksNone = 0,
ksAltKey = 1,
ksCtrlKey = 2,
ksShiftKey = 4;
......
.......
代码:
require( './lib/mycode.js' );
for( var p in global )
{ console.log( p ); }
.... 你最终会看到:
........ <- many other vars
........
........
ksNone
ksAltKey
ksCtrlKey
ksShiftKey
让我思考的是,要包含一个带有一系列通用函数的文件并不容易。例如,我有一些函数来验证字符串和数字,以及不需要在命名空间或类中的所有其他东西。通常,要包含这样的函数,您必须为它指定导出,或者通过fs和eval()以一种复杂的方式包含它-另请参见
question
.
我尝试了以下方法:
ksNone = 0,
ksAltKey = 1,
ksCtrlKey = 2,
ksShiftKey = 4,
isNumber = function( i )
{
return typeof i === 'number' && isFinite(i) && !isNaN(i);
},
isValidNumber = function( i, iMin, iMax )
{
if( !isNumber( i ) )
{ return false; }
if( isNumber( iMin ) && i < iMin )
{ return false; }
if( isNumber( iMax ) && i > iMax )
{ return false; }
return true;
},
isString = function( a )
{
return ( typeof a === 'string' || ( a instanceof String ));
},
isValidString = function( s, iMinLen, iMaxLen )
{
if( isString( s ) )
{
var iLen = s.length,
bIsMin = ( isNumber( iMinLen ) && iMinLen >= 0 )?(iLen >= iMinLen):(iLen > 0),
bIsMax = ( isNumber( iMaxLen ) && iMaxLen >= 0 )?(iLen <= iMaxLen):(iLen > 0);
return ( bIsMin && bIsMax );
}
return false;
};
再次遍历现在将输出:
输出:
........ <- many other vars
........
........
ksNone
ksAltKey
ksCtrlKey
ksShiftKey
isNumber
isValidNumber
isString
isValidString
一旦包括在内,因为它现在在全球范围内,我可以在任何地方这样做:
代码:
var test = "yes"
if( isValidString( test ) ) // call the global function
{ console.log( "String is valid" ); }
String is valid
问题:
var
(它在严格模式下不起作用-
"use strict";
当你包含一个文件时会发生什么?扫描NodeJs核心常量、变量、函数以使其保持私有?是合法使用还是虫子?做还是不做,你怎么看?