最近看微信公众账号/知乎网上的文章说,现在的前端的人都注重用什么框架,一问原生js感觉都没有用到工作中.用不到的,学这些意义没有.上午我刚面试了一个前端,工作4年吧.最初是北大青鸟培训的,做后端.net转前端的.应该说js基础,面向对象的语言学习的应该还是不错的.我写了三个js题目.基本答不上来.说用不到.反问我你们公司用原生js写么?说到vue.anglur,react头头是道.像个大牛.问平时都怎么学习.回答github下载别人的代码学习.看知乎,csdn等等.找问题用baidu.我问他,你遇到工作当中的问题,你用baidu搜索别人分享的答案解决工作的问题.你与没有想过自己写文章或者记录一下你自己怎么解决问题的呢?他回答工作太忙.公司就4个前端.没有时间写...这个人过来应聘的人是我们老大朋友推荐过来的.我把面试的结果一一告诉老大让老大自己判断录不录用吧.在这里也时刻提醒着我要好好学习js基础.罗里吧嗦的说了这么多,自己也有一点对不起哪位面试的,本身我自己技术也不咋地,惭愧惭愧,还要装的挺懂的,也发现了我自己的自身的不足之处.跑题了.不好意思.

一、const、let、var的区别

const定义的变量不可修改,const一般在require一个模块的时候用或者定义一些全局常量
let声明的变量作用域是在块级域中{},函数内部使用let定义后,对函数外部无影响,可以在声明变量时为变量赋值,默认值为undefined,也可以稍后在脚本中给变量赋值,在生命前无法使用。
var 声明的变量作用域是全局的或者是函数级的

二、重复声明同一个变量时,表现不同:
'use strict';
(function() {
  var varTest = 'test var OK.';
  let letTest = 'test let OK.';
  var varTest = 'varTest changed.';
  let letTest = 'letTest changed.'; //直接报错:SyntaxError: Identifier 'letTest' has already been declared
  console.log(varTest); //输出varTest changed.(注意要注释掉上面letTest变量的重复声明才能运行)
  console.log(letTest);
}());

变量作用范围,表现不同
'use strict';
(function() {
  var varTest = 'test var OK.';
  let letTest = 'test let OK.';
  {
    var varTest = 'varTest changed.';
    let letTest = 'letTest changed.';
  }
  console.log(varTest); //输出"varTest changed.",内部"{}"中声明的varTest变量覆盖外部的letTest声明
  console.log(letTest); //输出"test let OK.",内部"{}"中声明的letTest和外部的letTest不是同一个变量
}());

三、javascript严格模式'use strict';

判断浏览器是否支持严格模式:

var hasStrictMode=(function(){"use strict";return this===undefined;}());
在严格模式中禁止使用with语句
在严格模式中,所有变量要先声明,否则catch从句参数或全局对象的书zing赋值,将会throw一个引用错误(在非严格模式下,这种隐式声明的全局变量的方法是给全局对象添加一个新属性)
在严格模式中,调用的函数(不是方法)中的一个this值是undefined.(在非严格模式下,调用函数中的this值总是全局对象)。可以利用这种特性来判断js实现是否支持严格模式。
同样,在严格模式中,当通关过call()或apply()来调用函数时,其中的this值就是call()或apply()传入的第一个参数(在非严格模式下,Null和undefined值被全局对象和转换为对象的非对象值所代替)
在严格模式下,给只读属性赋值和给不可扩展的对象创建新成员都将抛出一个类型错误异常(在非严格模式下,这些操作只是简单的操作失败,不会抛错)
在严格模式下,传入eval_r()的代码不能在调用程序所在的上下文中声明变量或定义函数,二在非严格模式中可以这样的。姓范,变量和函数定义是在eval_r()创建的新作用于中,这个作用域在eval_r()返回就弃用了。
更多更详细的关于”javascript 严格模式”说明,请参考阮一峰的博客 《Javascript 严格模式详解

转var,let,const,js严格模式的详解的更多相关文章

  1. js调试工具Console命令详解

    这篇文章主要介绍了js调试工具Console命令详解,需要的朋友可以参考下   一.显示信息的命令 复制代码 代码如下: < !DOCTYPE html> < html> &l ...

  2. JQ的offset().top与js的offsetTop区别详解

    一.前言 最近在做一个图片懒加载的插件,就纵轴(Y轴)而言,我需要时时获取图片的上偏移量,好判断是否已进入视图区域,而我所理解的是offsetTop应该是跟offset().top一样的,然后陷入了因 ...

  3. Atitit.设计模式-----触发器模式 trigger  详解

    Atitit.设计模式-----触发器模式 trigger  详解 1. 触发器概念1 1.1. 触发器位置 after|before|instead of1 2. 数据库里面的触发器1 2.1. o ...

  4. JQ的offset().top与JS的getBoundingClientRect区别详解,JS获取元素距离视窗顶部可变距离

     壹 ❀ 引 我在 JQ的offset().top与js的offsetTop区别详解 这篇博客中详细分析了JQ方法offset().top与JS属性offsetTop的区别,并得出了一条offset( ...

  5. Java多线程编程中Future模式的详解

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

  6. Java多线程编程中Future模式的详解<转>

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

  7. 8.var目录下的文件和目录详解

    1./var目录下的文件和目录详解. /var (该目录存放的是不断扩充且经常修改的目录,包括各种日志文件或者pid文件,存放linux的启动日志和正在运行的程序目录(变化的目录:一般是日志文件,ca ...

  8. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  9. JS中this关键字详解

    本文主要解释在JS里面this关键字的指向问题(在浏览器环境下). 阅读此文章,还需要心平气和的阅读完,相信一定会有所收获,我也会不定期的发布,分享一些文章,共同学习 首先,必须搞清楚在JS里面,函数 ...

随机推荐

  1. android-启动另外一个Activity

    启动另外一个Activity 在完成了上一节课的学习后,我们已经创建了一个带有text输入框和一个button的app. 在本课中,我们将在MainActivity类中添加SendButton的单击响 ...

  2. MYSQL随笔心得1

    cmd链接数据库命令: 输入密码进入 显示全部的数据库: 退出服务器连接,还有/p   quit 非关系型数据库:NOSQL,not only sql 不仅仅是SQL 代表:redis,mongodb

  3. nginx压力测试webbench

    下载压力测试工具webbench wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz 安装依赖包 yum -y in ...

  4. 从微服务治理的角度看RSocket、. Envoy和. Istio

    很多同学看到这个题目,一定会提这样的问题:RSocket是个协议,Envoy是一个 proxy,Istio是service mesh control plane + data plane. 这三种技术 ...

  5. cache方法用于查询缓存操作,也是连贯操作方法之一。

    cache方法用于查询缓存操作,也是连贯操作方法之一. cache可以用于select.find和getField方法,以及其衍生方法,使用cache方法后,在缓存有效期之内不会再次进行数据库查询操作 ...

  6. Hystrix容错处理

    如果服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直接提供者响应或超时.在高负载场景下,如果不做任何处理,此类问题可能会导致服务消费者的资源耗竭甚至整个系统的崩溃.这时,就需要进行容 ...

  7. docker 安装 ElasticSearch

    docker pull docker.elastic.co/elasticsearch/elasticsearch:5.6.9 docker images docker run -e ES_JAVA_ ...

  8. OpenCASCADE圆与平面求交

    OpenCASCADE圆与平面求交 eryar@163.com 在 解析几何求交之圆与二次曲面中分析了OpenCASCADE提供的类IntAna_IntConicQuad可以用来计算圆与二次曲面之间的 ...

  9. PAT甲级——A1074 Reversing Linked List

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...

  10. hibernate hql语句 注意事项

    现在有实体类 Student 和User . public class Student{ private String id; private Sting classRoom; private Use ...