JavaScript语言精粹(一)(词法作用域,JSON及其服务器处理,document.write()与document.writeln()区别)
2017-04-21 16:39
513 查看
Why JavaScript?
因为它是Web浏览器的语言。因为它使一门拥有极强表达能力的语言。
浏览器的API和文档对象模型(DOM)相当糟糕—Q:怎么糟糕了?—连累JavaScript遭到不公平的指责。
Analyzing JavaScript
优秀的想法:函数;弱类型;动态对象;对象字面量表示法。糟糕的想法:基于全局变量的编程模型。
1.函数
JS中函数基于词法作用域-lexical scoping。词法作用域在书写代码或者声明时确定的,而动态作用域在运行时确定的。例如:
function static(){ alert(foo); } function dynamic(){ var foo = 3; static(); } var foo = 1; dynamic();//弹出1 alert(foo);//弹出1
来自知乎用户的解释更深入,有助于理解:
动态作用域就是整个程序运行的时候只有一个env。
什么是env呢?env就是一组binding。
binding是什么呢?binding就是从identifer到value的映射。
dynamic scope在每次函数求值的时候都会在这唯一的一个env里查询或更新。
而static scope是每次函数求值的时候都创建一个新的env,包含了函数定义时候的所能访问到的各种binding。这个新的env连同那个函数一起,俗称闭包Closure。
链接:https://www.zhihu.com/question/20032419/answer/49183240
2.弱类型
无需建立复杂的类层次,永远不用做强制转换,也不用应付类型系统以得到想要的行为。3.对象字面量表示法
JSON的灵感来源,成为流行的数据交换格式。Json是一种文本格式,可以被人和机器阅读。Json是一种极简的,轻便的和文本式的JS子集。通常用于与服务端交换数据。例如:{ “name”:”runoob”, “alexa”:10000, “site”:”www.runoob.com” }
Json有6种类型的值:对象,数组,字符串,数字,布尔值和特殊值null。大多数语言的数据结构都可以映射成Json对象或者Json数组。
在接受服务器数据时一般是字符串,使用JSON.parse()方法将数据转化为JS对象。例如:
var text = '{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }';
var obj = JSON.parse(text);
document.getElementById("demo").innerHTML = obj.name + ":" + obj.site;
使用 XMLHttpRequest 来获取Json文件内容
var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { myObj = JSON.parse(this.responseText); document.getElementById("demo").innerHTML = myObj.name; } }; xmlhttp.open("GET", "/try/ajax/json_demo.txt", true); xmlhttp.send()
4.原型继承
JS是一个无类型的对象系统,对象直接从其它对象继承属性。5.糟粕:JS依赖于全局变量进行连接
解决方案:闭包等其它知识点:
1.document.write() 和 document.writeln() 的区别
//JS代码: document.write("Hello,world "); document.write("Hello,world "); document.write("\n"); document.writeln("Hello,world "); document.writeln("Hello,world "); document.write("<pre>"); document.writeln("Hello,world "); document.writeln("Hello,world "); document.write("</pre>");
//检查元素 <body> "Hello,world Hello.world Hello,world Hello,world " <pre>Hello,world Hello,world </pre> </body>
效果展示
2.用method方法去为所有的函数定义新方法
Function.prototype.method = function(name, func){ this.prototype[name] = func; return this; }
相关文章推荐
- document.write()和document.writeln()有什么区别
- document.write()与document.writeln()区别
- document.write和document.writeln区别,document.writeln换行
- document.write与writeln的输出内容区别说明
- document.write() 和 document.writeln() 区别
- document.write()和document.writeln()的区别,实现换行
- document.write()和document.writeln()的区别,一看即懂。-------writeln()为什么不换行
- document.write与writeln的输出内容区别说明
- js中document.write和document.writeln的区别
- SqlServer链接服务器配置及其在作业更新时出现 [SQLSTATE 42000](错误 7410)的分析处理
- IOS-分析JSON、XML的区别?JSON、XML解析方式的底层是如何处理的?
- JS中document.write和innerHTML的区别
- 服务器返回数据的json处理
- QJsonDocument 处理 JSON
- Json&Gson学习总结(一)---Json和Gson区别与联系及其使用
- java弱引用(WeakReference)和SoftReference的区别以及在android内存处理的作用
- document.write和appendChild的区别
- document.write和document.documentElement.innerHTML的一个区别
- document.write/writeln非IE/Opera浏览器中可能会造成元素获取不到
- 虚继承的概念及其作用,虚继承与一般继承的区别