关于JavaScript变量范围的快速问题.
为什么alert()函数打印值i而不是返回undefined?
$(document).ready(function () {
    for(var i = 0; i < 10; i += 1){
    }
     alert("What is 'i'? " + i);
});
我对JS很新,在几乎所有其他语言中我都涉及过,for循环范围内的声明将包含该循环的值,但在这种情况下不是,为什么?
即What is 'i'? 10'打印.
我知道INSIDE ES6类中没有REAL私有方法。但是我在玩了一会儿,发现了一些好东西-也许...
正如我提到的,不可能不公开对象的属性。但是,当我将类划分为单独的文件,然后将这些类导出时,我试图实现某种OOP编程:
class MyClass {
  constructor() {
    /**
     * Initialize stuff...
     */
  }
  myMethod() {
    /**
     * Do public stuff...
     */
  }
}
// expose class to environment.
export default MyClass;
所以我可以导入该类:
import MyClass from './MyClass.js';
当然myMethod可以从导入该模块的任何其他文件访问。既然我需要只能由该类访问的变量和函数,我已经尝试过了:
// private variable outside of class scope but still accessible.
let possiblePrivateVariable = 'am I a private variable?';
class MyClass {
  constructor() {
    /**
    * Initialize stuff...
    */
  }
  myMethod() {
    // run private method.
    console.log(_possiblePrivateMethod());
    // …在任何Web浏览器中,执行以下脚本将导致'wee'发送到控制台.在节点中它发送{}.
var d = 'wee';
console.log(this.d);
我意识到Node this在这种情况下指的是exports对象.我知道global变量,这不是我想要访问的.此外,上面的脚本也没有d在全局对象上设置.它到底在哪里?我可以console.log(d);在上面的脚本中明确地访问它,但它似乎被隐藏在一些非标准空间中,完全没有任何理由.
我也意识到删除var意志会d在global对象上声明,这是预期的行为,尽管var在顶层范围内将其值存储在与"裸"变量不同的位置似乎很愚蠢.我的意思是,模块系统不应该是某种数字预防措施来防范全球污染吗?在这里打破模式似乎很容易,因此很难做出标准的事情.
d也未在module对象上声明.
我没有必要证明我为什么要问这个问题,但我会回答第一个问题,但是"你为什么要做什么?"
var d = {};
d.bleep = 'y';
var a = Object.keys(d);
d.bloop = 'y';
d.blop = 'y';
var b = Object.keys(d);
// c = b - a;
var c = b.filter(function (item) {
    if(a.indexOf(item) === -1) {
        return true;
    }
    return false;
});
console.log(a,b,c);
以我可以区分某些对象状态的方式d,我应该能够区分顶级范围的状态.在浏览器中,这是 …
我不喜欢节点中的整个导出/需要内容,它需要太长时间。假设我有一个文件 server.js,并且我想使用whatever.js 中的函数。在 html 中我只需将其添加到标题中:
<script src='whatever.js'></script>
然后我就可以在我的身体脚本中使用whatever.js 的所有功能。
但在节点中,在 server.js 文件中我会这样做:
var myobject = require('./whatever.js');
但随后我需要将其设置为 myobject,此外我需要转到whatever.js 并手动决定要导出哪些函数。更不用说输入 myobject.someFunction() 比 someFunction() 写起来要长得多,而且我需要记住我公开/未公开的内容。
我想要一些我可以去的地方:
require('./whatever.js');
它将所有内容都放在全局中,没有废话。就像旧的 html/javascript 中一样。有没有办法在节点中做到这一点?
对我来说,Javascript 中的变量很容易理解:如果一个变量不在局部范围内,那么它就是全局对象中的一个字段。
但是 Javascript 命令呢?如果我只是在文件中编写 Javascript 命令(在任何函数之外),那么 Javascript 引擎将如何解释它?
----- file.js -----
console.log('hai:DDD');
--- end of file ---
它会function用命令创建某种“全局”或“主要”类型的对象然后执行它吗?如果有多个带有代码的文件怎么办?
我猜这个问题只适用于 node.js 因为在浏览器中所有 Javascript 代码都是事件处理程序
javascript ×5
node.js ×4
scope ×2
variables ×2
ecmascript-6 ×1
es6-class ×1
es6-modules ×1
for-loop ×1