变量提升/作用域链练习题
var a = [1];
var b =a;
b=[2];
console.log(a);
----------------------------
var a =[1];
b = a;
b[1]='a';
console.log(a);
----------------------------
//1.
console.log(a);
var a = 13;
function fn() {
console.log(a);
var a = 1;
}
fn();
console.log(a);
--------------------
//2.
console.log(a);
var a = 13;
function fn1() {
console.log(a);
a = 1;
}
console.log(a);
--------------------
//3.
//console.log(a);
a = 13
function fn() {
console.log(a);
a = 1;
}
fn();
console.log(a);
---------------------
//4.
var foo = 1;
function bar() {
if (!foo) {
var foo = 10
}
console.log(foo);
}
bar();
----------------------
//5.
function f5() {
f=ff();
return f;
function ff() {
return "f" in window;
};
var f;
}
console.log(f5());
--------------------------
//6.
var a = b = c = [1, 2, 3, 4];
b = 9;
a[1] = 0;
console.log(b[0]);
a = [1, 2, 3, 4];
c = [1, 2, 3, 4];
a[0] = b;
console.log(c);
console.log(a);
--------------------------
//7.
var ary = [1, 2, 3, 4];
function ff(ary) {
ary[0] = 0;
ary = [0];
ary[0] = 100;
return ary
}
var s = ff(ary);
console.log(ary);
console.log(s);
-------------------------------
// 8.
var a = 10, b = 11, c = 12;
function test(a) {
a = 1;
var b = 2;
c = 3;
}
test(10);
console.log(a);
console.log(b);
console.log(c);
--------------------------------
// 9
var fs = "hello";
(function (fs) {
console.log(fs);
var fs = fs || "world";
console.log(fs);
})(fs);
console.log(fs);
----------------------------------
var a = 9;
function ss() {
a = 0;
return function (b) {
return b + (a++)
}
}
var f = ss();
var m = f(5);
console.log(m);
var n = ss()(5);
console.log(n);
var x = f(5);
console.log(x);
console.log(a);
-------------------------------
//10
console.log(getA);
if("a" in window){
var a="1";
function getA(a) {
a=a||this.a;
console.log(a);
}
getA(a);
}
-----------------------------
//11----------(易错!!!!)
var a=2;
var obj1={
a:1,
fn1:(function (a) {
this.a=a;
a++;
return function () {
this.a=a++;
console.log(a);
}
})(a)
};
obj1.fn1();
var fn1=obj1.fn1;
fn1();
-------------------------------------
//12---------------(易错)
f = function () {return true;};
g = function () {return false;};
(function () {
if (g() && [] == ![]) {
f = function () {
return false;
};
return console.log(f())
}
function g() {
return true;
};
})();
console.log(f());
console.log(g());
------------------------------------
var num =2;
var obj = {
num : 0,
fn : function () {
num = 1;
// this-->obj
(function (num) {
// this --> window
++this.num;
num++;
console.log(num)
})(this.num)
}
}
obj.fn();
console.log(window.num,obj.num)
---------------------------------------------
var num =1;
var obj = {
num : 2,
fn : (function () {
this.num *= 2;
num +=3;
var num =1;
return function () {
num +=2;
this.num +=2
console.log(++num)
}
})()
};
var f= obj.fn;
f();
obj.fn();
console.log(window.num,obj.num)
-----------------------------------------------
1. var num = 2
var obj = {num: 1};
obj.fn = (function (num) {
this.num += 2;
num--;
return function (n) {
this.num += 2;
num--;
console.log(n + ++num);
}
})(this.num);
var fn = obj.fn;
fn(2);
obj.fn(1);
console.log(num, obj.num);
------------------------------------
2. var num = 10;
var obj = {num: 15};
obj.fn = (function (num) {
this.num += 10;
num *= 2;
return function (n) {
this.num += n;
console.log(n + (--num));
}
})(obj.num);
var fn = obj.fn;
fn(10);
obj.fn(15);
console.log(window.num, obj.num);
-----------------------------------------
3. var number =2;
var obj = {
number :4,
fn1 : (function () {
this.number*=2;
number = number*2;
var number = 3;
return function () {
this.number*=2;
number*=3;
console.log(number);
}
})()
};
var fn1 = obj.fn1;
fn1(); obj.fn1();
console.log(window.number,obj.number);
---------------------------------------
1.
console.log(getA);
if("a" in window){
var a="";
function getA(a) {
a=a||this.a;
console.log(this.a);
}
getA(a);
}
---------------------------------------
//2.
var a=2;
var obj1={
a:1,
fn1:(function (a) {
this.a=a;
a++;
return function () {
this.a=a++;
console.log(a);
}
})(a)
};
obj1.fn1();
var fn1=obj1.fn1;
fn1();
--------------------------------------------
//3.
var ary=[1,2,3,4];
ary.forEach(function(item,index){
ary[index]=this;
});
console.log(ary);
----------------------------------------------
//4.
var b="b";
var obj2={
b:"B",
getB:function (b) {
this.b=b+this.b;
return this.b
}
};
console.log(obj2.getB("是"));
----------------------------------------------
//5.
var aa=20;
function bind() {
var aa=12;
function fn() {
console.log(this.aa);
}
box.onclick=function () {
fn();
}
}
box.onclick();
//6.
var c=3;
function getC() {
this.c++;
return function (c) {
c=this.c*2;
console.log(c);
}
}
var obj3={
c:2,
getC:(function () {//this.getC
this.c-=1;
return this.getC
})()
};
getC();
obj3.getC();
var f3=obj3.getC;
f3();
console.log(window.c);
console.log(obj3.c);
---------------------------------------------
//7.
function g1() {
this.g="gg"
}
var obj4={
g1:g1,
gg:function () {
g1();
}
};
obj4.g1();
obj4.gg();
console.log(obj4);
console.log("g" in window);
------------------------------------------
//9
var number=2;
var obj={
number:4,
fn1:(function () {
this.number*=2;
number=number*2;
var number=3;
return function () {
this.number*=2;
number*=3;
alert(number);
}
})()
};
var fn1=obj.fn1;
alert(number);
fn1();
obj.fn1();
alert(window.number);
alert(obj.number);
--------------------------------------------
function fn(b) {
console.log(b);
if(1!=2){
console.log(b);
function b() {
console.log(b);
}
b();
console.log(b);
}
console.log(b);
b()
}
fn(1);
------------------------------------
if(false){
var a =1
}
console.log(a);
----------------------------------
**原型练习题
原型作业题
//
function C1(name){
if(name) this.name = name;
}
function C2(name){
this.name =name;
}
function C3(name){
this.name = name ||'join';
}
C1.prototype.name='Tom';
C2.prototype.name='Tom';
C3.prototype.name='Tom';
console.log(new C1().name);
console.log(new C2().name);
console.log(new C3().name)
-----------------------------------------
function fun(){
this.a=0;
this.b=function(){
alert(this.a);
}
}
fun.prototype={
b:function(){
this.a=20;
alert(this.a);
},
c:function(){
this.a=30;
alert(this.a)
}
}
var my_fun=new fun();
my_fun.b();
my_fun.c();
----------------------------------------------
function Foo() {
getName = function () {
console.log(1);
};
return this;
}
Foo.getName = function () {
console.log(2);
};
Foo.prototype.getName = function () {
console.log(3);
};
var getName = function () {
console.log(4);
};
function getName() {
console.log(5);
}
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
--------------------------------------------
function Fn() {
this.x = 100;
this.y = 200;
this.getX = function () {
console.log(this.x);
}
}
Fn.prototype.getX = function () {
console.log(this.x);
};
Fn.prototype.getY = function () {
console.log(this.y);
};
var f1 = new Fn;
var f2 = new Fn;
console.log(f1.getX === f2.getX);
console.log(f1.getY === f2.getY);
console.log(f1.__proto__.getY === Fn.prototype.getY);
console.log(f1.__proto__.getX === f2.getX);
console.log(f1.getX === Fn.prototype.getX);
console.log(f1.constructor);
console.log(Fn.prototype.__proto__.constructor);
f1.getX();
f1.__proto__.getX();
f2.getY();
Fn.prototype.getY();
-----------------------------------------------
var name = 'zhufengpeixun'
var Fn =function (name){
var name = 'world'
this.name = 'zhufeng'
this.sex =function(){
this.name = 'hello'
}
}
var f1 = new Fn(name)
var f2 = new Fn('age')
console.log(f1.name)
console.log(f2.age)
f1.sex()
console.log(f1)
f1.sex === f2.sex
Fn.name == f1.name
--------------------------------------
function Fn(){
var a =1
this.a = a
}
Fn.prototype.say = function(){
this.a = 2
}
Fn.prototype = new Fn
f1.__proto__.b = function (){
this.a = 3
}
var f1 = new Fn
console.log(f1.a)
console.log(f1.prototype)
console.log(f1.b)
f1.hasOwnProperty('b')
'b' in f1
f1.constructor == Fn
--------------------------------------
var num = 0;
function Fn(num) {
arguments[0] = 10;
this.num = 20;
return num;
}
Fn.num = 40;
Fn.prototype.num = 30;
var f = new Fn(num);
Fn.prototype.getNum = function () {
console.log(this.num);
};
console.log(f.num);
f.getNum();
Fn.prototype.getNum();
console.log(num)
var n = Fn(num);
console.log(n);
console.log(num);