# JavaScript

# Flag

对网页行为进行编程,Vanilla JS 就是指JavaScript(ECMAscript)

Polyfill (opens new window) 是一块代码(通常是 Web 上的 JavaScript) ,用来为旧浏览器提供它没有原生支持的较新的功能

js运行时/js引擎/JavaScript运行时/JavaScript引擎

# 学习

模块规范

/**
 * CommonJS 主要是NodeJs使用
 * 在一个node执行一个文件时,会给这个文件内生成一个 exports和module对象,而module有一个exports属性。
 * exports = module.exports = {};
 */
module.exports.x = x; // 导出模块
module.exports  = {};
// 为了方便,Node为每个模块提供一个exports变量,指向module.exports
// 注意,不能直接将exports变量指向一个值,因为这样等于切断了exports与module.exports的联系
//exports.x = x;
var example = require('./example.js'); // 导入模块

/**
 * AMD(Asynchronous Module Defination,浏览器端js模块化) 主要是RequireJS使用
 */
//定义模块myModule.js
define(['dependency'],function(){
   var name = 'Bily';
   function printName(){
        console.log(name);
    }
    return {
       printName: printName
    }
});
//加载模块
require(['myModule'],function(my){
    my.printName();
});


/**
 * CMD(Common Module Definition,通用模块定义)
 */
// cmd1.js
define(function(require,exports,module){
  // ...
  module.exports={
    // ...
  }
});

// cmd2.js
define(function(require,exports,module){
  var cmd2 = require('./cmd1')
  // cmd2.xxx  依赖就近书写
  module.exports={
     // ...
  }
});

/**
 * ECMAScript6
 * export与export default均可用于导出常量、函数、文件、模块等
 * 在一个文件或模块中,export、import可以有多个,export default仅有一个
 * 通过export方式导出,在导入时要加{ },export default则不需要
 * export能直接导出变量表达式,export default不行。
 */
export x = x; // 导出模块
export default {} // 为模块指定默认输出
import { stat, exists, readFile } from 'fs'; // 导入模块
var express = require('express');
  • Uncaught SyntaxError: Cannot use import statement outside a module

在报错是说无法在模块外部使用import语句,因为Module的加载实现的是es6语法, 所以在浏览器加载html文件时,需要在script标签中加入type="module"属性。

<script type="module" src="/static/js/index.js"></script>

# 微前端

Micro-frontends