总结:知识点

一、基础

1、模块化

1.1、说明:
  • 在Node.js中,一个模块中定义的变量,函数等都只能在这个文件内部有效,当需要从此JS文件外部引入这些变量、函数时,必须使用exports进行暴露,使用require引用

示例:

//test.js
let str = "hello world";
exports.str = str;

exports.fn = (...nums)=> {
    let sum = 0;
    for(let i=0; i<nums.length; i++) {
        sum += nums[i];
    }
    return sum;
};

//==================
//test1.js
let ff = require("./test");
console.log(ff.str);
let sum = ff.fn(1, 2, 5);
console.log(sum);
3330855-7e90f3150e1dec53.png
打印结果
1.2、exports和module.exports的异同
  • 值类型和引用类型
    exports为值类型,module.exports为引用类型
  • 区别:
    • exports只能使用“.”语法来向外暴露内部变量
    • module.exports既可以使用“.”语法,也可以直接复制一个对象
      module.exports.xxx = xxx;
      module.exports = {xxx: yyy}
  • module.exports包含了exports的所有功能,因为module.exports等于的就是exports(从源码中可以看出)

示例1:

//test20.js
exports = {
    str: "zs",
    fn: (...nums)=> {
        let sum = 0;
        for(let i=0; i<nums.length; i++) {
            sum += nums[i];
        }
        return sum;
    },
    obj: {name: "ls", age: 15}

};
//===================
//test21.js
let test = require("./test20");
console.log(test);  //打印结果为:{}

示例2

//test20.js
module.exports = {
    str: "zs",
    fn: (...nums)=> {
        let sum = 0;
        for(let i=0; i<nums.length; i++) {
            sum += nums[i];
        }
        return sum;
    },
    obj: {name: "ls", age: 15}

};
//===================
//test21.js
let test = require("./test20");
console.log(test);  //打印结果为:{ str: 'zs', fn: [Function: fn], obj: { name: 'ls', age: 15 } }
1.3、exports为何不能像module.exports一样通过直接赋值的操作?
  • exports和module都是global中的属性,只不过module是一个对象,而exports是一个变量
  • exports和module.exports指向的是同一地址,经过验证,exports和module.exports是相等的,都是{}
  • exports是值类型,而module.exports则是引用类型,module就是一个对象,其中有一个名为exports的属性变量

猜你喜欢

转载自blog.csdn.net/weixin_34019929/article/details/87433200