JavaScript细节成败
1、var
众所周知var用来定义变量 如 undefined,number,string,bool,array,function,object,null。
但有时候为了省事,就会出现一些内存泄露的情况:
function fun(){
var a=b=1;//为了省事直接赋值
}
fun();
console.log(a);//undefined;
console.log(b);//1 此时b成了全局变量
function fun(){
a=1;
var a=2;
console.log(a);//2;
}
fun();
console.log(a);//undefined; 编译时 变量 会默认转到上下文的首行,因此a不是全局变量
2、for循环
var arr=[1,2,3];
for(var i=0;i<arr.length;i++){
arr.push(i);//会出现死循环,数组push一个值会改变自身的length,而for一直会计算arr.length
//1、耗废性能
//2、循环修改数组不注意的情况下会出现意外的BUG
}
console.log(i);// 4 变量i可能不被注意,一直存在该上下文的作用域 。
//修改之后
var arr=[1,2,3];
var i,max;
for(i=0,max=arr.length;i<max;i++){
arr.push(i);
}
console.log(i);// 4
console.log(arr);//[1, 2, 3, 0, 1, 2]
3、new
var Person=function(name,age){
this.name=name;
this.age=age;
}
var per=new Person('张三',17);
上面new所完成的动作:
一、创建一个新对象;
二、将构造函数的作用域赋给新对象(因此this就指向了新对象);
三、执行构造函数中的代码(为这个新对象添加属性);
四、返回新对象赋值给per(this指向per);
4、function
function即是函数,也是构造函数,还可以是对象。
var fun=function(){
console.log(this.a);
this.c="345";
};//函数
fun.a="123",fun.b="234";//对象
var tempFun=new fun();//构造函数 输出123
console.log(tempFun.a);//undefined
5、this
执行上下文(EC):每当控制转移到一段可执行代码时,控制就进入一个执行上下文。每一个函数的返回都会退出当前的执行上下文。
this:执行上下文(EC)中的一个属性,在进入上下文时确定。
//闭包经典例子
var temp=1;
function fun(){
console.log(this);
var temp=0;
return function(){
console.log(this);
this.temp+=1;
console.log(this.temp);
}
}
var fun2=new fun();//new会创建新对象,并执行函数 运行时this指向创建对象(未命名,调试器用fun表示) 再赋值给fun2
fun2();//(因为fun2是全局对象,即this=window) 输出2
6、()括弧
1、(a+b) 表达式
2、a() 进入执行上下文(运行函数)
怎么区分呢
我的理解是 当"("前面是+、-、*、/、%、=、!等运算符时做为表达式处理;其它就会当做执行函数处理
7、[ ] 索引
var a=1;
a[0]=2;
console.log(a[0]);//undefined
javascript所有对象都会提供get和set的函数("引用类型"object function array string等 可以get到值,但"值类型"number 不行)
8、{ }
1、创建一个新对象 var obj={};
2、创建一个局布上下文(只有function可以)
for(int i=0;i<2;i++){
var a=i;
}
console.log(a);//2 for、switch、if等循环不能创建
9、执行上下文、变量对象、作用域链
1、执行上下文(EC) 上面说了只有function可以创建一块局部的上下文,当前上下文被载入内存的时候 就变成了执行上下文
2、变量对象(VO) 与执行上下文相关的特殊对象 储存上下文中的声明
2.1、变量(函数内声明的变量)
2.2、函数的声明
2.3、函数的形参
3、作用域链(Scope) 作用域是上下文中所有变量对象(包括父变量对象)的列表
JavaScript细节成败的更多相关文章
- Html,Css,Dom,javascript细节总结
最近愈发觉得基础的重要性,细节决定成败,所以希望能够将自己注意到的搜集到的一些关于前端的小细节小知识整理出来,更好的方便自己记忆回顾. 1.在构建网页Html框架时,尽量只给外层标记(即是父标记)定义 ...
- 开篇----JavaScript细节的那些事儿
JavaScript现在已经是全世界浏览器通用的语言,目前也完全可以在服务器端做开发,如Node.js,市面上好的JavaScript的书有很多,有的还是经典之作,值得收藏. 趁此东风,打算接下来写一 ...
- 我所了解的javaScript细节
变量转换 var myVar = "3.14159", str = ""+ myVar,// to string int = ~~myVar, // to in ...
- JavaScript细节整理
JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发(Node.js和Wakanda)等等.JavaScript还是 ...
- Javascript 细节优化技巧(转)
break 语句和 continue 语句 break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行. break语句用于跳出代码块或循环. var i = 0; while( ...
- JavaScript细节
1.关于全局变量 全局变量在所有的作用域中都是可见变量.当程序小,代码量小的时候,可能还便于维护,而随着程序越来越复杂,代码量也随之越来越大后,过多的全局变量会变的很难处理.因为一个全局变量可以被程序 ...
- 从零开始学习jQuery(剧场版) 你必须知道的javascript
原文:从零开始学习jQuery(剧场版) 你必须知道的javascript 一.摘要 本文是jQuery系列教程的剧场版, 即和jQuery这条主线无关, 主要介绍大家平时会忽略的一些javascri ...
- javaScript常用知识点有哪些
javaScript常用知识点有哪些 一.总结 一句话总结:int = ~~myVar, // to integer | 是二进制或, x|0 永远等于x:^为异或,同0异1,所以 x^0 还是永远等 ...
- 转:drupal常用api
drupal常用api 最短的函数 // 语言字串,除了可以获取对应语言外,还可以设置字串变量.可以是!var, @var或 %var,%var就添加元素外层.@var会过滤HTML,!var会原 ...
随机推荐
- Java SpringMVC 定时任务
1.web.xml 2.spring-mvc.xml <?xml version="1.0" encoding="UTF-8"?> <bean ...
- Intellij IDEA设置运行时Java参数
1.选中类,点击顶部菜单:Run-->Edit Configuration,如下所示: 2.选择Application,指定的类,在右边选择Configuration,并在VM options中 ...
- 【JMeter】source("文件路程")和${变量}同时出现会报错
source("D:\\apache-jmeter-3.0\\testcase\\java\\Test.java"); //${journeyLen} 以上两句在JMeter脚本里 ...
- springboot 入门八-自定义配置信息(编码、拦截器、静态资源等)
若想实际自定义相关配置,只需要继承WebMvcConfigurerAdapter.WebMvcConfigurerAdapter定义些空方法用来重写项目需要用到的WebMvcConfigure实现.具 ...
- iOS知识点、面试题 之二
最近面试,与大家分享一下,分三文给大家: 当然Xcode新版本区别,以及iOS新特性 Xcode8 和iOS 10 在之前文章有发过,感兴趣的可以查阅: http://www.cnblogs.com/ ...
- A星寻路算法(A* Search Algorithm)
你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢? 如果是的话,请看这篇教程,我们会展示如何使用A星寻路算法来实现它! 在网上已经有很多篇关于A星寻路算法 ...
- php trim源码分析
本文同时发表于https://github.com/zhangyachen/zhangyachen.github.io/issues/9 核心代码如下: /* {{{ php_trim() * mod ...
- Mysql5.7.20使用group by查询(select *)时出现错误--修改sql mode
使用select * from 表 group by 字段 时报错 错误信息说明: 1055 - Expression #1 of SELECT list is not in GROUP BY cla ...
- 正确使用volatile场景--状态标志
同步机制:volatile 特点:可见性:不具备原子性 每个线程有自己单独的内存:如果线程1和线程2公用一个变量name:如果两个线程并发进行,并且需要访问变量name:如果这个变量具有了可见性,线程 ...
- 导出生成xsl文件
public String expData() throws Exception{ List<SubArea> list = subAreaService.fin ...