function T(arg){
this.a = arg;
return this;
}
var b=T(3);
var a=T(2);
console.log(a.a);
console.log(b.a);
天真的以为输出会是 “2 3”,结果是"Window Window"。
解析:
var b=T(3);
之后,有window.a=3;b=window;
var a=T(2);
此时有window.a=2;a=window;
在全局作用域中执行var a=
,实际上是执行 window.a=
,所以这一步执行了window.a=window
var a=Symbol('key');
var b=Symbol('key');
a==b;
a===b;
function A(){}
A.prototype.logB=function(){
console.log('B');
}
function B(){}
//your code
var b=new B();
b.logB();//'B'
A. B.prototype=A.prototype
B. B.prototype=A.prototype.proto
C. B.prototype=A
D. B.prototype=new A();//我选了这个
测试了一下,A、D答案都对
align-center:center;
vertical-align:middle;
justify-content:center; /*垂直居中*/
align-items:center; /*水平居中*/
<html>
<head>
<title>title>
head>
<body>
<button id="btn">clickbutton>
<script type="text/javascript">
var btn=document.getElementById('btn');
btn.addEventListener('click',function(){console.log('click one')})
btn.addEventListener('click',function(){console.log('click two')})
script>
body>
html>
控制台会输出什么?
function bar(){
return foo;
foo=10;
var foo='11';
}
console.log(bar());//undefined
typeof bar();//"undefined"
js引擎在读取js代码时,会先进行解释,再执行。解释时会将变量声明提升到顶端,所以上面的代码实际上是:
function bar(){
var foo;
return foo;
foo=10;
var foo='11';
}
console.log(bar());//undefined
typeof bar();//"undefined"
再来看个变量声明提升与函数声明提升混合的:
function bar(){
return foo;
foo=10;
function foo(){}
var foo='11';
}
typeof bar(); // "function"
为什么不是"undefined"了呢?
这是因为**变量提升只是把变量声明提升到当前执行环境的最顶端,而函数提升是提升整个函数。**看看下面的例子就明白了:
console.log(test);//undefined
test_f();//fun
var test=10;
function test_f(){
console.log("fun");
}
[1,2] == [1,2];//false
很容易就填了true了,但是需要注意的是,这两个数组没有指向同一个引用,虽然他们值相同,但不是指向同一个引用
~4; //-5
~10; //-11
4(10)=0000 0100 (2);~4=1111 1011=-5;(负数二进制转十进制,除符号位外,各位取反,末位+1)
10(10)=0000 1010 (2); ~10=1111 0101=-11;
function foo(a,b){
arguments[1]=2;
console.log(b);
}
foo(1);//undefined
原来我填了2,应该是下面这种情况才是输出2:
function foo(a,b){
arguments[1]=2;
console.log(arguments[1]);
console.log(b);
}
foo(1);//2 undefined
foo();//false,全局作用域下,this指向window,明显this!=bar
foo.apply(bar);//true,将this指向bar,
const b=foo.bind({});//foo将this指向一个空对象{}
b();//bar也是空对象,可是与this的空对象不是同一个引用
b.apply(bar);//false有空再慢慢研究了~