数据类型:

作用域

每个函数都有自己的执行环境,执行环境定义了变量有权访问的其他数据,决定了他们各自的行为。

每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量或函数都保存在这个对象中。

当代码在一个环境中执行时,会创建变量对象的作用域链

js没有块级作用域

函数声明与函数表达式

function test(){}//函数声明,他的重要特性是函数声明提升
var test=function(){}//函数表达式

递归

保险的递归写法(命名函数表达式):

 var factorial = (function fa(num){
if(num<=1){
return 1;
}else{
console.log(num);
return num*fa(num-1);
}
});

闭包

创建闭包:在一个函数内部创建另一个函数;

作用:延长变量的作用域链

原理:内部函数的作用域链包含外部函数的作用域链

缺点:过度使用可能会造成内存泄露

例子:这个例子中写了两个按钮,点击按钮的时候弹出此按钮被点击的次数。

 <body>
<button id="btn1" onclick="test1()">btn1</button>
<button id="btn2" onclick="test2()">btn2</button>
<script>
var test1 = showClickNumber();
var test2 = showClickNumber();
function showClickNumber(){
var number = 0;
return function(){
number = number+1;
alert(number);
}
}
</script>
</body>

这个例子可以形象地描述一个闭包:showClickNumber函数内部先定义了一个变量number用于计数,然后返回一个匿名函数;

在这个匿名函数里面,我们使用到了外部函数的number变量;

这样虽然showClickNumber函数执行完了,但它的内部变量number也不会销毁,因为他还在被test1,test2方法引用。

虽然只申明了一个变量,两个按钮却会各自统计各自的点击数量,不会相互影响

关于this对象

this对象是在运行时基于函数的执行环境绑定的

1、在全局函数中:this=window;

2、函数作为某个对象的方法被调用时:this=对象;

3、通过call()或apply()改变函数执行环境时,this指向指定的对象

模仿块级作用域--私有作用域

(function(){
//块级作用域
})();

js没有块级作用域的概念,用这样一个自执行的函数(闭包)包起来,它里面的变量就成了局部变量,还可以提高运行速度

创建对象的推荐方式

1、组合使用原型模式和构造函数模式

function Persion(name,age,job){
this.name = name;
this.job = job;
this.age = age;
}
//protocol指向函数的原型对象,原型对象会自动获得constructor(构造函数)属性
//constructor包含一个指向prototype属性所在函数的指针
//通过constructor,还可以为原型对象添加其他属性和方法
//下面的代码,我们重置了Persion原型,应该为constructor赋值,否则就丢失了constructor值
Persion.prototype={
constructor:Persion,
sayName:function(){
alert(this.name);
}
}

2、动态原型模式

 function Persion(name,age,job){
this.name = name;
this.job = job;
this.age = age;
if(typeof this.sayName() != "function"){
Persion.prototype.sayName = function(){
alert(this.name);
}
}
}

js 一些基础知识的更多相关文章

  1. css+js+html基础知识总结

    css+js+html基础知识总结 一.CSS相关 1.css的盒子模型:IE盒子模型.标准W3C盒子模型: 2.CSS优先级机制: 选择器的优先权:!important>style(内联样式) ...

  2. 001/Node.js(Mooc)--基础知识

    一.Node.js基础知识 node.js用C++语言编写. 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时 ...

  3. node.js的基础知识

    第一部分知识: .命令行窗口(小黑屏).CMD窗口.终端.shell - 开始菜单 --> 运行 --> CMD --> 回车 - 常用的指令: dir 列出当前目录下的所有文件 c ...

  4. js的基础知识笔记

    目录 一.基本数据类型 二.函数 三.面向对象 一.基本数据类型 1.使用var声明变量.使用;结尾.使用{}表示代码块.使用驼峰式命名 2.变量是弱类型的,即并不严格要求声明变量的类型,一个变量可以 ...

  5. 【JS】基础知识

    引言 在互联网的演化过程中,网页制作是Web1.0时代的产物,那时网站的主要内容都是静态的,用户使用网站的行为也以浏览为主. 2005年以后,互联网进入了Web2.0时代,各类似桌面软件的Web应用大 ...

  6. 二、js中基础知识

    该篇文章主要是强化一下自己javaScript的基础,让写代码变得更轻松些.基础好的请忽略.    JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解 ...

  7. JS的基础知识

    前言:写前端代码时的各种取值纠结,让我决定我必须要好好学一下js............加油~ $("#tr"+id).remove() 删除某一行,而不用刷新页面 HightCh ...

  8. js函数基础知识

    [函数的声明及调用] function 函数名(参数1,参数2,....){ //函数体代码 return返回值: } 1.函数的调用: ①直接调用:函数名(参数1的值,参数2的值,....) ②事件 ...

  9. three.js引擎基础知识—摄像机、场景及渲染器

    一.three.js采用右手坐标系: x轴正方向向右,y轴正方向向上,z轴由屏幕从里向外,如下图右: 二.3D编程三要素:场景.渲染器.摄像机 1.场景:创建的物品和模型都需放入场景中 threejs ...

  10. JS常用基础知识

    前言:在js中dom和bom是我们操作的基本,在最初接触时候我也懵,但是后来慢慢发现其实bom就是操作浏览器,而dom就是操作文本框节点.

随机推荐

  1. 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)

    Abstract撰寫Verilog時,雖然每個module都會先用ModelSim或Quartus II自帶的simulator仿真過,但真的將每個module合併時,一些不可預期的『run-time ...

  2. jquery衬衣产品内容详情页

    html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  3. 用Linux中man命令查询C函数

    大家都知道在Unix/Linux中有个man命令,可以查询常用的命令,函数.可是对于我们这样只知道用"man 函数名"来查询的人来说,会遇到很多问题,比如: man read,我想 ...

  4. RabbitMQ之HelloWorld【译】

    简介 RabbitMQ是一个消息代理,主要的想法很简单:它接收并转发消息.你可以把它当做一个邮局,当你发送邮件到邮筒,你相信邮差先生最终会将邮件投递给收件人.RabbitMQ在这个比喻里,是一个邮筒, ...

  5. 举例说明:Hadoop vs. NoSql vs. Sql vs. NewSql

    转自:http://blog.jobbole.com/86269/   尽管层次数据库如今在大型机上依然被广泛使用,但关系数据库(RDBMS)(SQL)已经占领了数据库市场,并且表现的相当优异.我们存 ...

  6. trim() 是什么意思?

    这是一个很常见的函数,他的所用是去掉字符序列左边和右边的空格,如字符串str = " ai lafu yo ";str = trim(str); cout << str ...

  7. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  8. 【BZOJ】1649: [Usaco2006 Dec]Cow Roller Coaster(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1649 又是题解... 设f[i][j]表示费用i长度j得到的最大乐趣 f[i][end[a]]=ma ...

  9. ERROR: openstack Error finding address for http://10.16.37.215:9292/v1/images: [Errno 32] Broken pipe

    Try to set: no_proxy=10.16.37.215 this should help 转自: http://askubuntu.com/questions/575938/error-i ...

  10. adb server is out of date.killing的解决办法

    当把手机连接到电脑端口运行adb程序调试时,出现了下面这样的情况: 分析:出错的原因是adb的端口被其他程序的进程占领了,所以要做的就是找到并kill该进程.     工具/原料   cmd.exe. ...