发表于: 2017-03-22 23:22:02
1 1144
今天完成的事情:
今天查看了一些修真院web小课堂的js方面的ppt,包括“JS中this的指向”、“JSON是什么?如何处理转义”、“闭包是什么,用处如何”等、对json、ajax、闭包和JavaScript的内存空间这些知识点有了更多的了解,同时为明天的小课堂做准备,查看了一些有关bootstrap常用组件的资料。
明天计划的事情:
制作web小课堂要用到的ppt,并向师弟学习下如何把内容发布到微信公众号上,继续整理学到的JS的知识点,做好笔记,学习Jquery的用法。
遇到的问题:
ppt“JS中this的指向”https://ptteng.github.io/PPT/PPT/js-02-This%20in%20javascriptCD.html#/中提到“在Java语言中,this关键字的含义是明确且具体的,表示当前对象。而在javascript中,this是动态绑定的,它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。”表示当前对象这点我能理解,比如鼠标指针点击了一个按钮,要对这个点击的动作做出反应,我们可以用到事件处理函数onclick和this关键字,如果点击的是一个<a>标签,则this表示“这个<a>元素节点”。但另外两种情况,全局对象和任意对象,虽然看了讲解,但还是感到困惑。
收获:
1.JSON是一种数据格式,书写格式是:名称/值对。名称/值对组合中的名称写在前面(在双引号中),值对写在后面,中间用冒号隔开。
例如:var json = {"name":"myname","password":123456}
它与js对象的区别就在于前者的属性名都加了引号。这种格式是JSON语法所要求的。而前者的格式其实也符合JS对象字面量的形式。
用eval()时,传入其中的代码会使用js解析器来解释,所以传入的是js对象,而调用JSON的方法时,如:parse(),参数的格式是必须要符合JSON语法要求的。
若要使用JSON和ajax向后端发送数据,可参照此格式:
$(document).ready(function(){
var saveDataAry=[];
var data1={"userName":"test","address":"gz"};
var data2={"userName":"ququ","address":"gr"};
saveDataAry.push(data1);
saveDataAry.push(data2);
$.ajax({
type:"POST",
url:"user/saveUser",
dataType:"json",
contentType:"application/json",
data:JSON.stringify(saveData),
success:function(data){
}
});
});
2.简单来说,假设函数A在函数B的内部进行定义了,并且当函数A在执行时,访问了函数B内部的变量对象,那么B就是一个闭包。
闭包可以用在许多地方。它的最大用处有两个:a.可以访问该函数作用域以外的变量对象。b.让这些变量的值始终保存在内存中。
代码示例:
/*使用闭包读取函数内部的变量*/
function f1(){
var n = 999;
function f2(){
alert(n);
}
return f2;
}
var result = f1();
result(); //999
f2在f1内部定义,且f2访问了f1中定义的局部变量n。这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。这就是Javascript语言特有的"链式作用域"结构(chain scope)。虽然f2内部的变量对f1不可见,但我们可以把f2作为返回值,这样就可以在f1外部读取它的内部变量。
/*使用闭包让函数内部的变量储存在内存中*/
function f1(){
var n = 999;
nAdd = function(){
n+=1;
};
function f2(){
alert(n);
}
return f2;
}
var result = f1();
result();//999
nAdd();
result();//1000
因为f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。
闭包常常用来间接访问一个变量。换句话说,隐藏一个变量。
闭包其实是 JS 函数作用域的副产品。
换句话说,正是由于 JS 的函数内部可以使用函数外部的变量,所以这段代码正好符合了闭包的定义。而不是 JS 故意要使用闭包。
搞清楚了这些概念,闭包似乎也没有那么神秘了。
评论