习得2022-04-12

80 阅读2分钟

1.函数前加叹号的作用

问题:匿名函数直接加括号执行会报错 image.png 加括号不报错

(function(){console.log('ok')}())
// ok
(function(){console.log('ok')})()
// ok

加感叹号不报错 image.png 返回true是因为匿名函数没有返回值,所以默认返回undefined,取反返回true 原因 无论是加括号还是加感叹号,以及加减乘除运算符,都是让一个函数声明语句变成一个表达式。函数声明语句加括号执行报错,变成表达则不报错。

因为这样的代码混淆了函数声明和函数调用,以这种方式声明的函数 a,就应该以 a(); 的方式调用。

但是括号则不同,它将一个函数声明转化成了一个表达式,解析器不再以函数声明的方式处理函数a,而是作为一个函数表达式处理,也因此只有在程序执行到函数a时它才能被访问。

swordair.com/function-an…

2.匿名函数自调用的原理和作用

(function() { /* code */ })();

可以用它创建命名空间,只要把自己所有的代码都写在这个特殊的函数包装内,那么外部就不能访问,除非你允许(变量前加上window,这样该函数或变量就成为全局)。

3.模块化

模块化发展

1)全局函数,引发命名冲突,数据不安全;

2)namespace 外部可修改,数据不安全;

3)匿名函数自调用 数据私有,接口通过闭包暴露出来 缺点:当模块之间有依赖关系时不好处理。 4)文件模块化

  1. CommonJS 文件作用域,缓存,同步加载 - 服务端 nodejs
  2. AMD - 异步加载 - 浏览器
  3. UMD - 前后端跨平台模块化-兼容以上两种

4.如何设计编写发布一个vue组件

  1. 设计组件 复用 - 确定属性和API 外到内,确定每个区域的参数 内容 - 元素(属性) 样式 - 插槽/默认模板

  2. 编写HTML、CSS 布局和样式 属性-> props:{ width:{ type:String, default:0 }... }

  3. 逻辑代码 :style="imgHeight?{height:imgHeight+'px'}:{}"

  4. 测试组件

<template v-slot:footer>
    <div></div>
</template>
  1. 打包JS - webpack(模块依赖 -> 静态资源) webpack, 分析文件依赖,把所有相关文件打包成四类文件:js、css、jpg、png entry、output、module(rule、loader(vue-loader))、plugin(HTML)、mode 按需引用-> +index 整体引用

  2. 打包CSS - gulp 流式的

  3. 模块化 业务复杂->切分->模块化

  4. 发布npm - 引入测试