每天学习点js
---- 有人会说js很简单,很容易学,但是要想把这门语言用活,用精通还是需要下很大的功夫的。那么我们就来看看接下来这几道js面试题吧。
题1
if(!(a in window)){
var a = ;
}
console.log(a);
在控制台输出的结果是 undefined,其实就是考察js中变量提升的知识点。
变量提升表示的是变量的声明会被提前到函数顶部的地方,而赋值语句不会提升。因此上面的题目实际是等于如下代码
//变量提升
var a;
if(!(a in window)){
a = 1;
}
console.log(a)
变量a提升到顶部,第一句就相当于window.a = undefined,所以在if语句中,判断条件始终是false,因此a=1不会执行,最终输出undefined。
题2
var a = 1,
b = function(){
x && a(--x);
}
console.log(a);
结果是1.
这道题考察的知识点是是具名函数表达式,声名函数表达式是不攒在变量提升的,所以函数的定义不会被提前到顶部;而且声名函数表达式的名字在外部访问时会报错,只能函数内部访问到。我们可以看看下面的例子。
var b = function a () {}
b(); //调用正常
a();//typeError:a is not a function
题3
function a(x){
return x*2;
}
var a ;
console.log(typeof a);
结果为 function
这道题目是的知识点是 函数声明和变量声明。 需要记住一点就是,在JavaScript中,函数声明的优先级高于变量声明的优先级。
因此在上述题中,由于优先级的问题,a会被定义为一个函数,后面定义的变量不会生效,因此typeof的时候会返回function。
但是,需要注意的是,虽然函数声明会覆盖变量声明,但不会覆盖变量的赋值,我们将上面的代码该下,就会发现这个特点。
function a(x){
return x*2;
}
var a = 1;
console.log(typeof a);
上面的代码会返回number。因为赋值语句a= 1不会被覆盖,所以a会是一个数字,而不是函数,最终返回number。
题4
function b(x,y,a){
arguments[2] = 10;
console.log(a);
}
b(1,2,3);
最终输出的结果是10
但是,需要注意一种特殊情况,那就是严格模式,在严格模式下,arguments对象实际是函数参数的一个拷贝,实际指向的是不同的内存空间,对arguments值的改变并不会影响到函数参数值。
所以在严格模式下输出的是3
function a(){
console.log(this);
}
a.call(null);
输出的结果是window对象。
这道题目考察的call方法,在js中,如果给call方法传递的第一个参数为null或者undefined,那么call方法中this会指向全局对象。
在浏览器环境中,全局对象为window;而在nodejs环境中全局对象为global,因此上述代码如果在浏览器下运行,会返回window。
每天学习点js的更多相关文章
- 每天学习点js(2)
在日常开发中可能有很多不被重视但有关系着基础的知识,下面我们就来看看这几道题吧 题1 ["1","2","3"].map(parseInt) ...
- 我的学习笔记之node----node.js+socket.io实时聊天(1) (谨此纪念博客开篇)
本想着从hello word开篇,也确实写了相关学习笔记.各种原因吧,现在又着急写出作品,便作罢. 这里将记录一个node.js+socket.io的实时聊天程序.(当然我也是跟着网上各种教程资料学习 ...
- 一个Js开发者学习Python的第一天
原文地址:小寒的博客 https://www.dodoblog.cn/blogs/5bf6b8fa0c09883d0f8aad13 作为一个有着足足两年半学习经验和一年半开发经验的js开发者,看着js ...
- 我的学习笔记之node----node.js+socket.io实时聊天(1)
本想着从hello word开篇,也确实写了相关学习笔记.各种原因吧,现在又着急写出作品,便作罢. 这里将记录一个node.js+socket.io的实时聊天程序.(当然我也是跟着网上各种教程资料学习 ...
- XSS攻击 js 脚本注入
原文地址:http://www.cnblogs.com/robot/archive/2009/04/15/1436107.html 1.不要相信Request.QueryString: 相信在asp时 ...
- Vue.js 和 MVVM 小细节
MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...
- js学习笔记:操作iframe
iframe可以说是比较老得话题了,而且网上也基本上在说少用iframe,其原因大致为:堵塞页面加载.安全问题.兼容性问题.搜索引擎抓取不到等等,不过相对于这些缺点,iframe的优点更牛,跨域请求. ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
随机推荐
- php simpleXML操作xml的用法
XML简介 XML是一种流行的半结构化文件格式,以一种类似数据库的格式存储数据.在实际应用中,一些简单的.安全性较低的数据往往使用 XML文件的格式进行存储.这样做的好处一方面可以通过减少与数据库的交 ...
- 从VGA到GPU!细数二十年显卡发展历程
VGA有很多层涵义,本来是用于代表一个分辨率(您可能不了解VGA,但应该知道QVGA代表什么),随后被普遍称为显示输出接口.为了输出VGA分辨 率.提供VGA输出接口,显卡和VGA就有了不解之缘,显卡 ...
- VxWorks6.6 pcPentium BSP 使用说明(一):基本概念
"VxWorks6.6 BSP 使用说明"将发布pcPentium和idp945两个系列的BSP的使用说明.每个系列约5篇文章.之后还将发布由这两个官方提供的BSP的实战移植方法. ...
- VxWorks操作系统shell命令与调试方法总结
VxWorks下的调试手段 主要介绍在Tornado集成开发环境下的调试方法,和利用支撑定位问题的步骤.思路. 1 Tornado的调试工具 嵌入式实时操作系统VxWorks和集成开发 ...
- 通过回调函数的理解来进一步理解ajax及其注意的用法
一,再一次理解回调函数 (function($){ $.fn.shadow = function(opts){ //定义的默认的参数 var defaults = { copies: 5, opaci ...
- 异常-----freemarker.core.InvalidReferenceException问题解决
案例一 1.1.错误描述 五月 28, 2014 9:56:48 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template ...
- docker学习系列(三):docker镜像的分层结构
docker的镜像分层 docker里的镜像绝大部分都是在别的镜像的基础上去进行创建的,也就是使用镜像的分层结构. 实验 比如说使用dockerfile去创建一个最简单的hello镜像.创建好对应的d ...
- Python Cookbook(第3版)中文版:15.20 处理C语言中的可迭代对象
15.20 处理C语言中的可迭代对象¶ 问题¶ 你想写C扩展代码处理来自任何可迭代对象如列表.元组.文件或生成器中的元素. 解决方案¶ 下面是一个C扩展函数例子,演示了怎样处理可迭代对象中的元素: s ...
- Java高并发之从零到放弃
前言 本篇主要讲解如何去优化锁机制或者克服多线程因为锁可导致性能下降的问题 ThreadLocal线程变量 有这样一个场景,前面是一大桶水,10个人去喝水,为了保证线程安全,我们要在杯子上加锁导致大家 ...
- Luogu3242:[HNOI2015]接水果
题面 Luogu3242 Sol 考虑每个盘子怎样才能接到一个水果 分两种情况: 盘子的\(x, y\)在一条链上,那么水果的两点就要在这条链之外 不在的话,水果的两点就分别在盘子的两点的子树中 记录 ...