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会原 ...
随机推荐
- vue.js使用webpack发布,部署到服务器上之后在浏览器中可以查看到vue文件源码
webpack+vue 2.0打包发布之后,将发布的文件部署到服务器中之后,浏览器中访问的时候会出现一个webpack文件夹,里边会显示vue文件源码 如果不想让vue源文件显示出来,可以在confi ...
- 迭代var()内置函数的时候出现RuntimeError: dictionary changed size during iteration的解决办法
下午看了Mr Seven的教学视频,其中有一段讲全局变量的视频,迭代输出全局变量的时候报错了. 视频中的做法: for k,v in vars().items(): print(k) 打印结果 for ...
- 小白的Python之路 day4 生成器
一.列表生成式 看下面例子: 列表生成式的作用:主要是让代码更简洁(还有装X的效果) 二.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包 ...
- JDK动态代理[1]----代理模式实现方式的概要介绍
日常工作中经常会接触到代理模式,但一直没有对其进行深究.代理模式一直就像一团迷雾一样存在我心里,什么是代理模式?为什么要使用代理?代理模式有哪些实现?它的底层机制是怎样的?这些问题促使着我迫切想要揭开 ...
- C#中级-通过注册表读取Windows Service程序执行路径
一.前言 假设我们的C#解决方案中有多个程序应用,如:Web应用.控制台程序.WPF程序应用和Windows服务应用. 那么这些非Windows Service应用程序怎么在代码中找到W ...
- Docker(四):Docker基本网络配置
1.Libnetwork Libnetwork提出了新的容器网络模型简称为CNM,定义了标准的API用于为容器配置网络. CNM三个重要概念: 沙盒:一个隔离的网络运行环境,保存了容器网络栈的配置,包 ...
- lesson - 2 yum /单用户/救援模式/Linux 启动
课程大纲:1. yum使用yum 是一个在线安装软件包的工具,它可以帮我们解决软件包的依赖,这个日后会详细介绍.我们介绍了以下几个用法:yum list 这个命令可以列出所有安装过和未安装的软 ...
- 【分治】peak find
分治算法 算法设计中一种常用的优化方法就是分治的思想,它的解决思路就是将原始的问题划分为性质一样,但是规模减小的子问题,然后通过子问题的解和合并子问题的解得到最终的解,就是分治的思想: 比较常见的分治 ...
- JVM 运行时的内存分配
首先我们必须要知道的是 Java 是跨平台的.而它之所以跨平台就是因为 JVM 不是跨平台的.JVM 建立了 Java 程序和操作系统之间的桥梁,JVM 是用 C 语言编写,而 C 语言不具备跨平台的 ...
- eclipse 更换 JDK 版本后报错
在实际开发过程中,可能由于项目的需要,我们需要更换 JDK 的版本.但是更换后会报错,如下: Java compiler level does not match the version of the ...