在Vue源码中如何使用

  介绍

这篇文章主要介绍在Vue源码中如何使用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

,用于扩展一个语句的作用域链,但一般情况下不建议使与语用句,因为它可能是引起混淆错误和兼容性问题的根源。在Vue源码中有使与语用句的功能点,因此在这里将简介其功能,以助于阅读框架源码。

性能的利与弊

<代码>与语句可以在不造成性能损失的情況下,减少变量的长度。其造成的附加计算量很少。使用& # 39;与# 39;可以减少不必要的指针路径解析运算。但是在大部分情况下,即使不使用,使用临时变量来保存指针或者使用电话,也能达到同样的效果。

<代码>与语句使得程序在查找变量值时,都是先在指定的对象中查找。所以那些本来不是这个对象的属性的变量,查找起来将会很慢。

示例

let  obj =, {   ,,,,,,   ,,,,,,   ,,,c: 3   }   (obj) {   ,,,console.log (a),,,,//1   ,,,console.log (b),,,//2   ,,,console.log (c),,,,//3   }

这段代码中,与关联的obj对象,在与代码块中,每个变量都首选被认为是一个局部变量,如果这个局部变量与obj对象的某个属性同名,则这个局部变量会指向obj对象属性。

function  fn (obj) {   ,,,,(obj) {   ,,,,,,,a =, 1;   ,,,}   }   let  obj1 =, {   ,,,,2   }   let  obj2 =, {   ,,,b: 3   }      fn(其中obj1);   console.log (obj1.a),,,,,//1      fn (methoda)   console.log (obj2.a),,,,,//定义   console.log (a),,,,,,,,,,//1,变量一个被泄漏到全局作用域链上

上例中,其中obj1存在一个属性,methoda没有一个属性.fn (obj)接收一个obj形参,是一个对象引用,并执行了(obj)。在与代码块的内部,对一个实际上是一个引用,将1赋值给了一个。

当传递methoda给时,与所声明的作用域就是methoda,从这个作用域下开始对一个进行查询.obj2的作用域,fn的作用域和全局作用域中都没有查找到标识符,因此在<强>非严格模式下会自动在全局作用域创建一个全局变量,而<强>严格模式下则会抛出<代码> ReferenceError>

性能降低

如果在代码中使用了,那么JS引擎在<强>编译阶段只能简单地假设关于标识符的判断都将无效,因为编译器也不能知道传递给用的作用域对象到底是谁,因此JS引擎在<强>编译阶段强进行的性能优化都将无效。最糟糕的情况,那就是如果出现了,所有的优化都将变得无意义。最简单的做法就是不做任何优化,那么运行起来一定会很慢,这将是无法避免的事实。

Vue中与

Vue在编译的时候,会把模板生成对应的渲染功能,而这个渲染函数中又正好使用了与语句。按照上文来说,不建议使与语用句,为什么在Vue中又会使用到呢?

function  render  (), {   with 才能;(这个),{   ,,,return  _c (& # 39; p # 39;, {: {“click":改变}},[_c(& # 39;跨度# 39;[_v(_(数量)))),_v (“,“), _c(& # 39;跨度# 39;,,,,,,(_v(_(名字))))))   ,,}   }

因为与的作用域和模板的作用域正好契合,可以极大地简化模板编译过程。而用的代码量很少,把作用域的处理交给JS引擎来做也更可靠。当然,最理想的情况还是要去掉用的使用,预编译的时候会自动把第一遍编译生成的代码进行一次额外处理,用完整的AST分析来处理作用域,把与拿掉,顺便支持ES6语法。换句话说,如果用webpack + vue的时候,最终生成的代码是没的有。

以上是“在vue源码中如何使用,“这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

在Vue源码中如何使用