<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
// function add (){
// var a = 3;
// return a
// }
//一般情况下,函数声明的局部变量,在函数调用完之后就会被销毁掉
// console.log(add())
// add()
//
//
// function add(){
// var a = 3
// return function(){
// return a
// }
// }
//
// abc = add()
// console.log(abc()) //闭包的好处 // var list = [f0,f1,f2]
// f0()---->0
// f1()---->1
// f2()---->2
//假设需要一个列表,这个列表存放n个函数,只要调用list[i](),那么就会返回i //-----------------------------------案例1:
// var list = []
//
// for(var i=0;i<3;i++){
// var temfn = function(){
// return i
// }
// list.push(temfn)//将函数添加进列表
// }
//
// console.log(list)
// list[0]() //====> 3 //----------------------------------案例1:解决方案 var list = []
for (var i=0;i<3;i++){
//匿名函数通过自己调用自己执行,获取i值传入num参数
//num参数这个变量被返回的匿名函数所引用,所以参数num不会被销毁,使得num参数可以保留。
var temfn = (function(num){
return function(){
return num
}
})(i)
list.push(temfn)
} // console.log(list[0]()) function Counter(){
var num = 0
return function(){
num ++
return num;
}
} var abc = Counter()
console.log(abc())
console.log(abc())
console.log(abc()) //能不用闭包,就尽量不用闭包,因为会导致内存的可使用量下降(内存泄漏) </script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
// a = add(3,4)
// console.log(a) //将一个匿名函数给到1个变量
// var add = function(a,b){
// a = a + 1;
// b = b + 1;
// return a+b
//
// console.log(123)
// } //直接申明函数的方式
// function add (a,b){
// a = a + 1;
// b = b + 1;
// return a+b
// }
//注意:直接申明函数的方式,浏览器会自动将它提升到最前面。 //js不会对函数的参数进行检查
// a = add()
// console.log(a)
//
//返回值通过return返回出去,return语句执行之后,不会再继续执行函数后面的内容。 // function add(a=3,b=4){
// console.log(a,b)
// a = a + 1;
// b = b + 1;
//
// return a+b
// } function add(a,b){
if(a==undefined){
a = 3
}
if(b == undefined){
b = 4
}
a = a + 1;
b = b + 1; return a+b
} console.log(add())
var student = {name:'xx',age:16} function abc(){
//在函数里面,用var申明使这个函数的局部变量,在其他地方是拿不到的
var num = 3
var student = {name:'666'}
return student.name
} console.log(abc())
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
//1、字面量的方式,偶尔创建一个特定的对象,那么就是最简单和便捷方式
var student = {
name:'xx',
age:'xx'
}
//2、构造函数的方式
var student = {}//构造一个新的空对象
var student = new Object()//构造一个新的空对象 student.name = 'xx'
student.age = 'xx' //3、创建一个函数来构造一个对象,工厂模式
function Student(name,age){
var student = {}
student.name = name;
student.age = age
return student
} var s1 = Student('xx','xx');
var s2 = Student('mingzi','nianling') //4、构造一个构造函数,通过构造函数,实例化一个对象
function Student(name,age){
this.name = name;
this.age = age
this.showName = function(){
console.log(this.name)
}
//没有返回值
} var s3 = new Student('gzhanshu','xxx')
//如果使用了new 调用函数,那么首先会创建1个对象,并且将这个对象赋值s3,如果函数里有this,那么这个this就是这个新创建的对象
var s4 = Student('yyy','uuu')//如果没有new,就是一个普通函数,那么普通函数没有返回值,就是未定义 </script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
//构造一个构造函数,通过构造函数,实例化一个对象
function Student(name,age){
this.name = name;
this.age = age
console.log(name)
//没有返回值
} function Man(){
this.run= function(){
console.log('会跑')
}
this.showName = function(){
console.log(this.name)
}
} var man = new Man()
//设定构造函数对象的属性prototype,将原型对象给到这个prototype属性
Student.prototype = man var s3 = new Student('gzhanshu','xxx') //原型对象也可以有原型,那么原型的原型所形成的链式,那么就叫做原型链
//原型里面属性方法可以被,实例化的对象共享。大大的减少内存的消耗
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
//对象也存放一组数据的地方
//student,学生姓名,学生年龄,会考试,会读书,会唱歌 //字面量的方式
var student = {
name:'老王',
age:'30',
dizhi:'隔壁',
isMan:true,
son:{name:'xiaowang',age:3},
action:function(){
console.log('拐卖良家妇女')
}
}
console.log(student) //想要获取里面的属性
// student['属性值']
// student.属性值
// 我们如果想要用变量的情况下,那么就要用中括号。 // student.xuehao = 123456789
// student['xuehao'] = 12432342
// console.log(student) var student2 = new Object()
student2.name = 'xxzz'
student2.age = 16
console.log(student2)
</script>
</body>
</html>

最新文章

  1. 百度UEditor基本使用
  2. ramnit病毒
  3. nginx基于IP的虚拟主机
  4. SecureCrt脚本(一)顶级对象之Crt
  5. 文章转载至CSDN社区罗升阳的安卓之旅,原文地址:
  6. Android中数据库的操作流程详解
  7. ##DAY12 UITableViewCell自定义
  8. URAL 6089 Nine
  9. Java的递归、IO流
  10. javascript基础 之 代码规范
  11. 解决Eclipse中无法直接使用Base64Encoder的问题(转载)
  12. Elasticsearch(ES)API 增删查改常用操作
  13. [NOI2016]优秀的拆分&amp;&amp;BZOJ2119股市的预测
  14. Unity之AssetBundle打包
  15. GeneralizedLinearAlgorithm in Spark MLLib
  16. VS2017写代码时几个常用的快捷键
  17. jQuery.page 分页控件
  18. Spring Boot之初始化项目
  19. Ubuntu下编译安装OpenCV 2.4.7并读取摄像头
  20. 关于Oracle分区表的理解

热门文章

  1. linux查看系统的一些版本号指令
  2. 如何解决myeclipse2014突然无法打开的问题
  3. 如何让谷歌浏览器支持小于12px的字体
  4. 从零开始入门 K8s | 应用存储和持久化数据卷:核心知识
  5. JDK 1.8 之 Map.merge()
  6. mysql库复制
  7. Java 学习笔记之 Thread运行过程分析
  8. Java动手动脑第四讲课堂作业
  9. Java对象是怎么创建的(通过对象的创建,了解JVM内存结构)
  10. 搭建YUM本地仓库