转var,let,const,js严格模式的详解
最近看微信公众账号/知乎网上的文章说,现在的前端的人都注重用什么框架,一问原生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严格模式的详解的更多相关文章
- js调试工具Console命令详解
这篇文章主要介绍了js调试工具Console命令详解,需要的朋友可以参考下 一.显示信息的命令 复制代码 代码如下: < !DOCTYPE html> < html> &l ...
- JQ的offset().top与js的offsetTop区别详解
一.前言 最近在做一个图片懒加载的插件,就纵轴(Y轴)而言,我需要时时获取图片的上偏移量,好判断是否已进入视图区域,而我所理解的是offsetTop应该是跟offset().top一样的,然后陷入了因 ...
- Atitit.设计模式-----触发器模式 trigger 详解
Atitit.设计模式-----触发器模式 trigger 详解 1. 触发器概念1 1.1. 触发器位置 after|before|instead of1 2. 数据库里面的触发器1 2.1. o ...
- JQ的offset().top与JS的getBoundingClientRect区别详解,JS获取元素距离视窗顶部可变距离
壹 ❀ 引 我在 JQ的offset().top与js的offsetTop区别详解 这篇博客中详细分析了JQ方法offset().top与JS属性offsetTop的区别,并得出了一条offset( ...
- Java多线程编程中Future模式的详解
Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...
- Java多线程编程中Future模式的详解<转>
Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...
- 8.var目录下的文件和目录详解
1./var目录下的文件和目录详解. /var (该目录存放的是不断扩充且经常修改的目录,包括各种日志文件或者pid文件,存放linux的启动日志和正在运行的程序目录(变化的目录:一般是日志文件,ca ...
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
- JS中this关键字详解
本文主要解释在JS里面this关键字的指向问题(在浏览器环境下). 阅读此文章,还需要心平气和的阅读完,相信一定会有所收获,我也会不定期的发布,分享一些文章,共同学习 首先,必须搞清楚在JS里面,函数 ...
随机推荐
- 2019-11-9-win10-支持默认把触摸提升-Pointer-消息
title author date CreateTime categories win10 支持默认把触摸提升 Pointer 消息 lindexi 2019-11-09 15:32:31 +0800 ...
- 创建 linuxrc 文件
创建 linuxrc,加入如下内容: [arm@localhost my_rootfs]#vi linuxrc #!/bin/sh #挂载/etc 为 ramfs, 并从/mnt/etc 下拷贝文件到 ...
- C++ 系列:基础知识储备
Copyright © 2000-2017, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ ----------------- ...
- 【转载】TCP演进简述
TCP演进简述 http://www.cnblogs.com/fll/ 一.互联网概述 TCP,即传输控制协议,是目前网络上使用的最多的传输协议,我们知道,整个互联网的体系结构是以IP协议提供的无连接 ...
- DISTINCT 方法用于返回唯一不同的值 。
DISTINCT 方法用于返回唯一不同的值 . 例如: $Model->distinct(true)->field('name')->select(); 生成的SQL语句是: SEL ...
- 18多校8th
a-容斥原理(带限制的不定方程) #include<bits/stdc++.h> using namespace std; #define mod 998244353 #define ll ...
- React中的Ajax
React中的Ajax 组件的数据来源,通常是通过Ajax请求从服务器获取,可以使用componentDidMount方法设置Ajax请求,等到请求成功,再用this.setState方法重新渲染UI ...
- 表单修饰符.lazy.number.trim
<!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...
- 《DSP using MATLAB》Problem 8.32
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- 嘴巴题7 BZOJ1426: 收集邮票
Time Limit: 1 Sec Memory Limit: 162 MB Submit: 546 Solved: 455 [Submit][Status][Discuss] Description ...