js深入浅出

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
    <title>js 深入浅出 笔记 第六,七章</title>

</head>
<body>

    <script type="text/javascript">
//***********************************************************
// console.log(); 向web控制台输出一条消息.
    //将var s;提前
    // ps:变量,函数的声明都会被前置。
        console.log(s);
        var s;

    //会报错,nfe未定义
        var func = function nfe(){};    // alert(func === nfe);

    //func类型为function
        console.log(typeof func);            

    //立即调用①
        Function("var s = 100;console.log(s);")();

    //立即调用②
        (function current(){
            console.log("立即调用");
        })();

    //总结:
/*
                    函数声明        函数表达式        函数构造器
前置                    true

允许匿名                            true            true

立即调用                         true            true                    

在定义该函数的作用    true
域通过函数名访问

没有函数名                                        true
*/
//*********************************************************** 

//***********************************************************
//全局的this
console.log(this === window);//true
this.a = 37;
console.log(a);//37

var test="test";
var sss = function(){
    return this.test;
}
console.log(sss());

//作为对象方法的函数的this
    var o = {test:1000};
    function objthis(){
        return this.test;
    }
    o.f = objthis;//此时o.f的类型为function
console.log(o.f());//1000

//对象原型链上this
var q = {w:function(){return this.a+this.b;},c:32};
//该Object.create()方法使用指定的原型对象和属性创建一个新对象。
//返回值:具有指定原型对象和属性的新对象。
var e = Object.create(q);
e.a = 1;
e.b = 4;
console.log(e.w());    

//构造器中的this
function myClass(){
    this.a =37;
    this.b = function(){
        console.log("b");
    }
}

var o = new myClass();//此时this指向空的对象,原型为myClass.phototype
o.b(); //b //默认this为返回值

function myClass2(){
    this.a =37;
    return {a:38};
}

var o = new myClass2();
console.log(typeof o);//object
console.log(o.a); //38
//ps.一般都是用Object.create根据字面量对象来创建对象,不提倡用new

//call/apply方法与this
function add(c,d){
    return this.a+this.b+c+d;
}
var o = {a:1,b:3};
add.call(o,5,7);
add.apply(o,[10,20]);
function bar(){
    console.log(Object.prototype.toString.call(this));
}
bar.call(7);
//*********************************************************** 

//***********************************************************
//apply/call方法
// apply或call会引用第一个参数的上下文环境
function foo(x,y){
    console.log(x,y,this);
}

foo.call(100,1,2);//1,2,Number(100)
foo.apply(true,[3,4]);//3,4Boolean(ture)
foo.apply(null);//undefined,undefined,window
foo.apply(undefined);//undifined,undifined,window

//bind方法
function getConfig(colors,size,otherOptions){
    console.log(colors,size,otherOptions);
}
var defaultConfig = getConfig.bind(null,"#cc0000","1024*768");
defaultConfig("123");//#cc0000 1024*768 123
defaultConfig("456");//#cc0000 1024*768 456
//科里化暂时没有理解
//*********************************************************** 

//***********************************************************
// 闭包
for(var i=0;i<3;i++){
    function a(){
        alert(i);
    }
}
a();

//http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
 var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      return function(){
        return this.name;
      };
    }
  };
  alert(object.getNameFunc()());

var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };
    }
  };
  alert(object.getNameFunc()());
//***********************************************************
//js作用域(全局,函数,eval)
for(var item in s={a:1,b:2}){
    console.log(s[item]);
}
    console.log(item);
//作用域链   

(function(){
    alert("zhixing");
})();

//*********************************************************** 

    </script>

</body>
</html>

时间: 2024-10-01 05:09:42

js深入浅出的相关文章

js深入浅出学习笔记(一)

js深入浅出 一. new Foo()创建的对象: 1.该对象的原型会指向Foo 的构造器的prototype属性: 好处是 如果访问该对象的属性时,如果该对象不存在,会继续根据原型链查找Foo的prototype属性上的值: 2. 用 in 来判断该属性是否属于该对象时,是true,意思是该属性是该对象的原型链上的: 3. 给该对象的属性赋值时,会先查找原型链上是否存在该属性则修改,如果不存在,则只在该对象增加一个属性并赋值: 4. 用hasOwnProperty来判断该属性是否存在对象上还是

10个免费开源的JS音乐播放器插件

音乐播放器在网页设计中有时候会用到,比如一些时尚类.音乐或影视类等项目,但这些 网页播放器 插件比较少见,所以这里为大家整理一个集合,也许会有用到的时候. 下面整理的播放器有些是支持自适应的,如果需要用到微信或手机上,可根据自己需要求,选择对应的网页播放器.  ● Codrops Audio Codrops Audio 界面使用纯CSS编写,支持响应式,可以方便在桌面.平板以及手机设备上使用.界面因为是CSS编写,所以如果懂CSS样式,可以自己设计一个新的样式来修改. 演示&下载 ● Dark

准备要看的node.js相关资料

node.js电子书 了不起的Node.js 深入浅出Node.js node.js入门经典 node.js开发指南 node.js相关优秀博文 官网 Infoq深入浅出Node.js系列(进阶必读) Node.js中文文档 被误解的 Node.js Node.js C++ addon编写实战系列 热门node.js模块排行榜,方便找出你想要的模块 nodejs多线程,真正的非阻塞 浅析nodejs的buffer类 利用libuv编写异步多线程的addon实例 Node.js中exports与m

【JavaScript】之面向对象的程序设计

最近几天跟着视频利用原生的JavaScript做了几个小插件,有图片画廊和图片轮转,实践的过程中,发现对JS的面向对象部分很是陌生,今日重看了<JavaScript高级程序设计>的面向对象部分,并结合了IMOOC网上的<JS深入浅出>教程在此做一下知识的梳理和总结. 一.什么是对象 ECMA-262中把对象定义为:"无序属性的组合,每个属性包含基本值.对象或者函数." 这就相当于说对象是一组没有特定顺序的值,每个属性或方法都有一个名字key,和对应的value.

书单收集

1. 前端技术是2015年增长比较快的领域之一,由于前端标准的兴起落后于已经成熟多年的服务端开发,所以信息量相对较多,如下是本人的书单. The Definitive Guide to HTML5CSS The Missing ManualProfessional JavaScript For Web DevelopersJavaScript The Definitiv eGuideEfffective JavaScriptJump Start bootstrapJQueryUI ThemesJ

node相关的精典材料

node.js电子书 了不起的Node.js 深入浅出Node.js node.js入门经典 node.js开发指南 node.js相关优秀博文 官网 Infoq深入浅出Node.js系列(进阶必读) Node.js中文文档 被误解的 Node.js Node.js C++ addon编写实战系列 热门node.js模块排行榜,方便找出你想要的模块 nodejs多线程,真正的非阻塞 浅析nodejs的buffer类 利用libuv编写异步多线程的addon实例 Node.js中exports与m

前端经典书籍整理(持续更新.....)

JavaScript高级程序设计 JavaScript高级程序设计第3版 密码:mci1 JavaScript权威指南 JavaScript权威指南 第6版 密码:vr92 深入浅出Node.js 深入浅出Node.js 密码:u69v Http权威指南 Http权威指南 密码:tlg3 数据结构与算法JavaScript描述 数据结构与算法JavaScript描述 密码:44vm 此书籍只能用作学习交流,切勿涉及商业,尊重原版!!!如有问题请联系@本人,谢谢. 原文地址:https://www

2020前端面试汇总

?01 前言 工作了这么久,一直没有自己的一个技术知识沉淀,这一次去找了很多前端面试题,再加上自己的工作经验,进行一次汇总,强烈要求自己掌握以下内容,不仅要知其然,还要知其所以然.让自己以后在面试或者工作中做到"心中有佛,不虚场合". 02 目录 下面是这篇文章的目录结构,一般比较简单的问题我就一笔带过了,主要是分享一下比较有难度的知识点,答案来自网上,如果有版权问题我会删除.还有本文只是给出一个大概的知识点,如果想要深入学习还要靠自己去查一下哦! 如果答案有错误,欢迎指正! 计算机基

深入浅出Node.js(一):什么是Node.js

Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企业资助,再到今年发布Windows移植版本,Node.js的前景获得了技术社区的肯定.InfoQ一直在关注Node.js的发展,在今年的两次Qcon大会(北京站和杭州站)都有专门的讲座.为了更好地促进Node.js在国内的技术推广,我们决定开设“深入浅出Node.js”专栏,邀请来自Node.js领域的布道师.