ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
~~~javascript 1.var fullName='language'; 2.var obj={ 3. fullName:'javascript', 4. prop:{ 5. getFullName:function(){ 6. return this.fullName; 7. } 8. } 9.}; 10.console.log(obj.prop.getFullName()); //undefined 11.var test=obj.prop.getFullName; 12.console.log(test()); // language ~~~ ~~~ // let a = 3, // b = 4; // function A(a) { // A = function (b) { // alert(a + (--b)); // }; // alert(++a); // } // A(5); // A(6); ~~~ ![](https://img.kancloud.cn/16/61/166157878356ef7b4f0c0bec61bd2c87_2668x1042.png) 23. ~~~javascript 1.window.val = 1; 2.let json = { 3. val: 10, 4. dbl: function () { 5. this.val *= 2; 6. } 7.}; 8.json.dbl(); // json.val = 20 9.let dbl = json.dbl; 10.dbl(); // window.val =2 11.json.dbl.call(window); // window.val =4 12.alert(window.val + json.val); // 4+20= "24 " ~~~ 24. ~~~javascript 1.(function () { 2. let val = 1; 3. let json = { 4. val: 10, 5. dbl: function () { 6. val *= 2; //函数才能产生作用域,对象不能产生作用域。let val = 1;是上级作用域 7. } 8. }; 9. json.dbl(); 10. alert(json.val + val); // 10+2 最后输出字符串“10“ 11.})(); ~~~ ~~~ // (function () { // //=>自执行函数执行,形成私有作用域 AA // let val = 1; // let json = { // val: 10, // dbl: function () { // //=>私有作用域,它的上级作用域是 AA ,和JSON对象没关系(对象不会产生作用域,它就是个堆而已) // val *= 2; //=>AA val=2 // } // }; // json.dbl(); // alert(json.val + val);//=>'12' // })(); ~~~ ~~~ // let test = (function (i) { // //=>不销毁的栈:i = 2 // return function () {//=>TEST等于这个小函数 // alert(i *= 2);//=>4 让上级作用域中的I=4 // } // })(2); // test(5); // let test = (i => () => i *= 2)(2); // console.log(test(5)); ~~~ ~~~ // let n = 2, // fn = () => { // this.n *= 3; // n++; // return m => console.log((++n) + m); // }; // let f = fn(4); // f(5); //9 // fn(4)(5); //11 // f(6); //13 // console.log(n); //7 ~~~ ![](https://img.kancloud.cn/b5/b3/b5b3a037a0d24da036d7cb06d79d9f49_3582x1082.png) ~~~ /*let Fn = function (x = 0, y = 0) { this.x = x; this.y = y; this.getX = function () { console.log(this.x); } }; Fn.prototype.getX = function () { console.log(this.x); }; let f1 = new Fn; Fn.prototype = { getY: function () { console.log(this.y); } }; let f2 = new Fn(1, 2); console.log(f1.constructor === f2.constructor); f1.getX(); // f1.getY();//=>Uncaught TypeError: f1.getY is not a function f1.__proto__.getX(); // undefined // f1.__proto__.getY(); // 报错 f2.getX(); // 1 f2.getY(); // 2 f2.__proto__.getX(); // 报错 f2.__proto__.getY();*/ // undefined // let fn1=function(){alert(1)}, // fn2=function(){alert(2)}; // fn1.call(fn2);//=>1 // 一个call执行左边的,两个两个以上执行右边的 // fn1.call.call(fn2);//=>2 ~~~ ![](https://img.kancloud.cn/78/90/78907959c832cbc13b90a2bad69ad4bf_482x195.png) ![](https://img.kancloud.cn/b9/79/b979bc8b4c92e20f5223083c067744c6_3526x1096.png) ~~~ /* * 函数的角色 * 1.函数(普通函数、类) * 2.对象 */ function Foo() { getName = function () { console.log(1); }; return this; } Foo.getName = function () { console.log(2); };//=>给FOO设置属性(FOO.XXX) Foo.prototype.getName = function () { console.log(3); };//=>给FOO的原型设置公有属性方法(NEW FOO().XXX) 他的实例可以执行 var getName = function () { //全局作用下的全局函数 console.log(4); }; function getName() { //全局函数 console.log(5); //变量提升阶段,声明+定义 } Foo.getName(); //2 getName(); //4 Foo().getName(); // 1 getName(); 1 new Foo.getName(); // 2 new Foo().getName(); // 3 new new Foo().getName(); //3 ~~~ ![](https://img.kancloud.cn/b6/52/b652a8b6fbb8048cc9f9213422998095_2924x1742.png)