周末正好有空就研究了下汤姆大叔的js系列博客,虽然只是学到点皮毛,依然获益匪浅。不得不说大牛的境界岂是吾等小辈可理解。

变量:

js有隐含的全局概念,意味着不声明的所有变量都是全局对象的属性。

function sum(x,y){
var res = x + y;
return res;
}

以上隐式声明全局变量的做法会多出一个全局命名空间,这显然不是我们想要的。

function sum(x, y) {
var res= x + y;
return res;
}

所以记住始终使用var声明变量。

funtion num(){
var a = b = 0;
}

以上链式声明变量依然是隐式声明全局变量。有朋友可能会疑惑,在局部里声明的变量怎么就变全局变量了!

但结果就是:a是局部变量,b是全局变量。

这是因为这个从右到左的赋值,首先是赋值表达式b = 0,但b没有声明,自然b就成全局变量了;然后再把0返回给声明了的a。这跟如下的代码同理:

function num(){
var a = {b = 0};
}

所以一次先声明所有需要声明的变量是比较好的习惯,并且在函数的顶部使用链式分配会更加容易阅读与修改:

function(){
var a,b;
}

var的另一个比较少用一点的就是:

用var声明的全局变量是不能被delete删除的;而没用var声明的全局变量是能被delete删除。

// 反例
myname = "global"; // 全局变量
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();

这是一个比较少注意到的问题,就是var声明不是放在函数顶部所造成的未定义。你可能会以为第一次弹窗会弹出'global',其实是undefined。

原因是myname被当做了局部变量,而第一个alert时该变量还未声明。等同于以下代码:

myname = "global"; // global variable
function func() {
var myname; // 等同于 -> var myname = undefined;
alert(myname); // "undefined"
myname = "local";
alert(myname); // "local"}
func();

顺便提一下代码是怎么处理的:第一阶段是解析变量以及函数和参数等,第二阶段才是执行代码。

for循环:

平常我们使用for循环一般是如下形式:

for(var i=0 i<arr.length; i++){
console.log(arr[i]);
}

但更好的办法是先缓存集合或者数组的长度:

var i,arrLen;
for(i=0,arrLen=arr.length;i<arrLen;i++){
...
}

还可以进一步优化的部分就是用i--代替i++,原因是向下数到0通常会更快:

var i;
for(i=arr.length;i--;){
...
}

或者是使用while:

var i = arr.length;
while(i--){
...
}

这些优化只会体现在性能上,实际项目中才能体现威力。

深入js之基本语法的更多相关文章

  1. 在MyEclipse中如何去掉JS或jsp语法错误提示!

    在MyEclipse中如何去掉JS或jsp语法错误提示! 关于在 MyEclipse 上 WEB 工程里面的 JS/JSP 经常会有语法错误提示,这是由于 MyEclipse 对其语法要求相当严格所造 ...

  2. 【每天半小时学框架】——React.js的模板语法与组件概念

           [重点提前说:组件化与虚拟DOM是React.js的核心理念!]        先抛出一个论题:在React.js中,JSX语法提倡将 HTML 和 CSS 全都写入到JavaScrip ...

  3. 基础常用JS函数和语法

    100多个基础常用JS函数和语法集合大全  来源:http://www.cnblogs.com/hnyei/p/4605103.html 网站特效离不开脚本,javascript是最常用的脚本语言,我 ...

  4. Vue.js:模版语法

    ylbtech-Vue.js:模版语法 1.返回顶部 1. Vue.js 模板语法 Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据. Vu ...

  5. 100多个基础常用JS函数和语法集合大全

    网站特效离不开脚本,javascript是最常用的脚本语言,我们归纳一下常用的基础函数和语法: 1.输出语句:document.write(""); 2.JS中的注释为//3.传统 ...

  6. 什么是js和js的基本语法

    时间:2016年12月15日 先讲讲基础语法: 大部分是来操作表单: js动态效果和数据交互(ajax?) js也有自己的API js大部分的DOM操作都是针对input的. 案例学习,对注册页面的简 ...

  7. 梳理一下JS的基本语法

    web三层结构来说 结构层:HTML         从语义角度,描述页面结构 样式层:CSS         从审美的角度,美化页面 行为层:JavaScript   从交互的角度,提升用户体验   ...

  8. [JS] javascript基础语法

    W3CSchool全套Web开发手册:点击下载 1.javascript是什么 js是具有面向对象能力的,解释性的程序设计语言. 2.js的类型 [基本类型]:string number boolea ...

  9. 常用原生JS函数和语法集合

    luoyishan-2017-10-08 1. 输出语句:document.write(""); 2. JS中的注释为// 3. 传统的HTML文档顺序是:document-> ...

  10. JavaScript(JS)基本语法(一)

    https://www.cnblogs.com/haiyan123/p/7577598.html 一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入 ...

随机推荐

  1. 不写代码也能爬虫Web Scraper

    https://www.jianshu.com/p/d0a730464e0c web scraper中文网 http://www.iwebscraper.com/category/%E6%95%99% ...

  2. sql trace script

    CREATE EVENT SESSION [sql_query_tracing] ON SERVER ADD EVENT sqlos.wait_info(    ACTION(sqlos.schedu ...

  3. JS-获取任意html节点属性

    获取节点属性:   确定获取

  4. TestNG参数化之@Parameters传参

    通过TestNG实现参数话常用两种方式,一种是借助 @Parameters读取testng.xml中参数,一种是使用@DataProvider注解传参. 此次主要讲解XML传参,语法:在java类中定 ...

  5. iOS AppStore 被拒原因

    De : Apple 3.12 - Apps should have all included URLs fully functional when you submit it for review, ...

  6. kubectl get componentstatus ERROR:HTTP probe failed with statuscode: 503

    通过kubectl命令可以查看k8s各组件的状态: [root@wecloud-test-k8s-1 ~]# kubectl get cs NAME STATUS MESSAGE ERROR cont ...

  7. VS2013如何添加LIb库及头文件的步骤

    在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. 2.添加文件引用 ...

  8. java学习笔记—HTTP协议(10)

    客户端浏览器和服务器Tomcat要进行基本的请求和响应的处理. 其实浏览器和服务器通信的数据的格式已经使用协议进行固定好了,只要双方发送固定格式的数据,那么就可以完成基本的通信. 如果开发者需要查看这 ...

  9. 微信小程序转发商品的详情页 + 转发功能(传参)

    1.微信小程序转发传参,利用的还是onShareAppMessageapi 2.利用的还有json转换 JSON 是用于存储和传输数据的格式. JSON 通常用于服务端向网页传递数据 函数 描述JSO ...

  10. “全栈2019”22篇Java异常学习资料及总结

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"22篇Ja ...