1.以下代码执行后,console 的输出是?
let x = 10;
let foo = () => {
console.log(x);
let x = 20;
x++;
}
foo();
抛出 ReferenceError
2.
var myObject = { foo: "bar", func: function() { var self = this; console.log(this.foo); console.log(self.foo); (function() { console.log(this.foo); console.log(self.foo); }()); } }; myObject.func();
程序的输出是什么?
bar bar undefined bar
1.第一个this.foo输出bar,因为当前this指向对象myObject。
2.第二个self.foo输出bar,因为self是this的副本,同指向myObject对象。
3.第三个this.foo输出undefined,因为这个IIFE(立即执行函数表达式)中的this指向window。
4.第四个self.foo输出bar,因为这个匿名函数所处的上下文中没有self,所以通过作用域链向上查找,从包含它的父函数中找到了指向myObject对象的self。
3.下列不属于javascript中查找元素的方法的是()
1.根据id获取元素
document.getElementById("id属性的值");
2.根据标签名字获取元素
document.getElementsByTagName("标签的名字");
3.根据name属性的值获取元素
document.getElementsByName("name属性的值");
4.根据class属性获取元素
document.getElementsByClassName("类样式的名字");
5.根据css路径获取元素 (获取一个)
document.querySelector("css路径");
6.根据css路径获取元素 (获取一组)
document.querySelectorAll("css路径");
4.下面这段代码:
console.log(1); let a = setTimeout(() => {console.log(2)}, 0); console.log(3); Promise.resolve(4).then(b => { console.log(b); clearTimeout(a); }); console.log(5);
控制台的输出结果是:
1 console.log(1);//同步 2 let a = setTimeout(() => {console.log(2)}, 0);//回调 3 console.log(3);//同步 4 5 Promise.resolve(4).then(b => { 6 console.log(b);//异步 7 clearTimeout(a); 8 }); 9 console.log(5);//同步
5.关于跨域问题下面说法正确的是?()
A可以利用flash的http请求,来处理跨域问题
B通过iframe设置document.domain可以实现跨域
C一般情况下,m.toutiao.com可以ajax请求www.toutiao.com域名下的接口并获得响应
D通过jsonp方式可以发出post请求其他域名下的接口
第一种方式:jsonp请求;jsonp的原理是利用<script>标签的跨域特性,可以不受限制地从其他域中加载资源,类似的标签还有<img>.
第二种方式:document.domain;这种方式用在主域名相同子域名不同的跨域访问中
第三种方式:window.name;window的name属性有个特征:在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。
第四种方式:window.postMessage;window.postMessages是html5中实现跨域访问的一种新方式,可以使用它来向其它的window对象发送消息,无论这个window对象是属于同源或不同源。
第五种方式:CORS;CORS背后的基本思想,就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是应该失败。
第六种方式:Web Sockets;web sockets原理:在JS创建了web socket之后,会有一个HTTP请求发送到浏览器以发起连接。取得服务器响应后,建立的连接会使用HTTP升级从HTTP协议交换为web sockt协议。
6.以下对闭包(closure)理解正确的有 ()ABCD
A闭包是指有权访问另一个函数作用域中变量的函数;
B函数内再嵌套函数;
C内部函数可以引用外层的参数和变量
D参数和变量不会被垃圾回收机制回收
7.下面结果为不为真的表达式是:()
A.null == undefined Object.prototype;
B.[1,2,3].splice(1,1,1) == [2]
C.let Mi = new Function();Mi.__proto__.__proto__ == Object.prototype;
D.'1' === true
A选项就是对的
B选项改变了原来的数组返回的是【2】比较的时候地址不一样所以是flase
CObject.prototype只是一个普通对象,它是js原型链的最顶端Object.prototype只是一个普通对象(普通对象没有prototype属性,所以值是undefined),
Object.prototype.__proto__=== null;//true
Object.prototype.prototype === undefied;//true
js中每一个对象或函数都有属性,但是只有函数对象才有prototype属性。
//函数对象
function Person()
{
}
// 普通对象
var obj = {};
obj.__proto__ === Object.prototype;//true
obj.prototype === undefined;//true
Person.__proto__ === Function.prototype;//true
Person.prototype !== undefined;//true
Function.prototype是个特例,它是函数对象,但是没有prototype属性。其他所有函数都有prototype属性。
Function.prototype.prototype === undefined;//true
函数也是对象,因为Function.prototype__proto__指向Object.prototype。
typeof Function.prototype.__proto__) === "object";//true
Function.prototype.__proto__=== Object.prototype;//true
内置的Function也是一个函数对象,它是通过自己来创建自己的。
Function.__proto__=== Function.prototype;//true
D.选择前面是字符串后面是布尔型所以false
8.以下表达式不会出现错误的有()
A.2.toString()
B.2..toString()
C.2 .toString()
D.(2).toString()
整数调用toString就会报错。
2..toString()因为连续的两个小数点不符合number的格式规则,第二个小数点才会被解析为调用方法
BCD
9.当用户打开一个网页时,想一直停留在当前打开的页面,禁止页面前进和后退,以下正确的是( AD )
A.window.history.forward(1);
B.window.history.back(1);
C.window.history.go(-1);
D.window.history.forward(-1);
history.back() 方法加载历史列表中前一个 URL。 这等同于在浏览器中点击后退按钮