深入浅析javascript函数中with


Posted in Javascript onOctober 28, 2018

/*js函数中with函数的用法分析

定义 方便用来引用某个对象中已有的属性

但是不能用来给对象添加属性 要给对象创建

新的属性 必须明确的引用该对象*/

代码格式

with(object)
 statements

 object:新的默认对象

statements:一个或多个语句 oject是该语句的默认对象

with 语句通常用来缩短特定情形下必须写的代码量。

x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10) y = Math.tan(14 * Math.E)
 with (Math){ x = cos(3 * PI) + sin (LN10) y = tan(14 * E)}
 function valiadate_reauired

简单的来说就是with相当于一种速写方式 在指定的代码区域,通过节点名称就能调用对象

 普通写法:

var car={
 size: suv,
 color:yellow,
 money:1500
 };

其他类调用

function={
 car car =new car();
 car.size=suv;
 car.color=yellow;
 car.money=1500;
 }

使用with的写法:省去了car.

with(car){
size=suv;
 color=yellow;
 money=1500; 
 }

使用with语句关联了car对象,解析时 with代码块的内部把每个变量都认为是局部变量;

如果局部变量里与car对象属性(例如size)属性同名,这个局部变量就会指向car里面的属性;

 缺点1

 with会自动在全局作用域创建一个全局变量,在严格模式下,会抛出ReferenceError 异常。

withwith 会在运行时修改或创建新的作用域,以此来欺骗其他在书写时定义的词法作用域。

 缺点2

 with在相同条件下比不使用它慢了很多,具体的原因是因为js在运行之前要进行预编译,其中有些优化依赖于能够根据代码的词法进行静态分析,并预先确定所有变量和函数的定义位置,才能在执行过程中快速找到标识符。 

但如果引擎在代码中发现了 with,它只能简单地假设关于标识符位置的判断都是无效的,因为无法知道传递给 with 用来创建新词法作用域的对象的内容到底是什么。所以js就不会优化

 总结

以上所述是小编给大家介绍的javascript函数中with,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
Javascript中暂停功能的实现代码
Mar 04 Javascript
jquery 指南/入门基础
Nov 30 Javascript
写自已的js类库需要的核心代码
Jul 16 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
Mar 25 Javascript
JS实现OCX控件的事件响应示例
Sep 17 Javascript
JavaScript操作class和style样式代码详解
Feb 13 Javascript
Bootstrap的modal拖动效果
Dec 25 Javascript
JS实现AES加密并与PHP互通的方法分析
Apr 19 Javascript
微信小程序中使用ECharts 异步加载数据的方法
Jun 27 Javascript
Nuxt配合Node在实际生产中的应用详解
Aug 07 Javascript
详解vue-element Tree树形控件填坑路
Mar 26 Javascript
在vue中created、mounted等方法使用小结
Jul 21 Javascript
微信小程序动画(Animation)的实现及执行步骤
Oct 28 #Javascript
又拍云 Node.js 实现文件上传、删除功能
Oct 28 #Javascript
javascript中函数的写法实例代码详解
Oct 28 #Javascript
vue项目中实现图片预览的公用组件功能
Oct 26 #Javascript
Node.js 使用axios读写influxDB的方法示例
Oct 26 #Javascript
vue中使用protobuf的过程记录
Oct 26 #Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
Oct 26 #Javascript
You might like
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
apache php模块整合操作指南
2012/11/16 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
详解php协程知识点
2018/09/21 PHP
javascript 变量作用域 代码分析
2009/06/26 Javascript
修复IE9&safari 的sort方法
2011/10/21 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
微信小程序 教程之条件渲染
2016/10/18 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
2018/01/13 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
Python字符串对象实现原理详解
2019/07/01 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
Python 复平面绘图实例
2019/11/21 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
高级销售求职信
2014/02/21 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android