美文网首页
Web之JavaScript(散碎笔记)

Web之JavaScript(散碎笔记)

作者: _palm | 来源:发表于2016-01-15 20:00 被阅读61次

JavaScript有变量提升的特点, 全文件扫描js文件时会自动将声明变量提前,但是这里需要注意的一个地方是:
<pre>虽然js变量声明语句会被自动提前,但是其赋值不会被提前.</pre>

比如:

function test() {
    alert(" test --  "  + name) ;
    var name = "hello.javascript." ;
}

调用test函数后 弹出内容为 test -- undefined , 就是这个原因,虽然能找到这个变量,但是赋值不会自动提前,也就变为未定义或者未初始化变量了

但是目前我还不知道 这种操作是在什么时候,不知道是在javascript引擎解释的时候还是在调用的时候. 我个人的理解更倾向于引擎解释的时候.

在比如:

myname = "global"; // 全局变量
function func() {
    alert(myname); // "undefined" 
    var myname = "local";
    alert(myname); // "local"
}
func();

以上代码,第一眼大部分人都会认为 先弹出global 在弹出local 其实不是.因为变量声明被提升其实代码应该是这样的:

myname = "global"; // 全局变量
function func() {
    var myname ;
    alert(myname); // "undefined" 
    myname = "local";
    alert(myname); // "local"
}
func();

//使用apply可以修复普通函数的this指针.
这里步骤如下:我们先保存原函数的指针然后使用apply 修复this指针,这里普通函数this指向null  或者window
//统计函数parseInt调用次数 , 我们先保存原函数 ,然后覆写函数parseInt 将计数器累加1,然后使用apply修复原函数指针. 
oldparseInt.apply(null,arguments) ;  这样相当于修改了原parseInt函数实现.

var count = 0 ;
var oldparseInt = window.parseInt ;
var parseInt = function() {
        count +=1 ;
        return oldparseInt.apply(window,arguments) ;
} ;

parseInt('10') ;
parseInt('16') ;
parseInt('14') ;
parseInt('13') ;
parseInt('11') ;
parseInt('19') ;
parseInt('12') ;
parseInt('14') ;
parseInt('15') ;
parseInt('17') ;

alert(count) ;



//apply
//我们可以将一个函数绑定到一个对象中.比如:
function run() {
        return ' string is ' + this.name + this.age ;
}

var obj = {
     name : 'palm' ,
     age : 24
} ;

var value = run.apply(obj,[]) ; //这里使用apply间接的就已经调用函数run ,会返回执行结果.

alert(value) ;

高阶函数使用

  1. map
    在js中我们可以将一个函数赋值给一个变量,如下:
var fun = function() {
    return '这是一个函数.' ;
}

然后,函数可以接收一个变量作为参数,那么函数也可以接收一个函数作为参数。如下:

function fun1() {
  return 'hello, javaScript.' ;
}

function fun2(x) {
    var value = x() ;
    return value ;
}

alert(fun2(fun1)) ; //hello, javaScript.

我们使用map 可以将数组反转、运算或者自定义操作等。例如:

var oNumber = window.Number ;

var Number = function(x) {
        return x*x ;
}

oNumber.apply(window,[]) ;
var arr = ['8','0','1','2','3','4','5','6'] ;
var arrstr = arr.map(Number) ;

alert( 'source code - ' + arr + 'now --' + arrstr) ;

以上代码利用了apply函数和map 使 字符串数组变为数字,并实现f(x) = x2 操作。

继承会在父对象的原型上继承.比如:

function Foo() {
    this.foo =  ' Foo\'s perpoties.' ;
}

function Bar() {
}

Bar.prototype = new Foo() ;

Bar.prototype.constructor = Bar ;


var bar = new Bar() ;
var bar1 = new Bar() ;
bar1.foo = 'bar1\'s perpoties.' ;
alert(bar1.foo) ; //bar's perpoties.

//console.log('==== '  + bar.constructor) ;

2.javaScript 中浮点运算会丢失精度,得到的结果只会无限接近正确值,而不等于正确值,比如:

var v1 = 0.1 ;
var v2 = 0.2 ;

console.log(v2 + v1) ;

但是我还不清楚为什么 <code> 0.1 + 0.1</code> 可以得到正常结果 0.2.

  1. javaScript中switch语句case匹配内部实现为=== ,如下:
function fun(value) {
   switch(value) {
    case 'A' : console.log('A') ; break ;
    case 'B' : console.log(B) ;  break ;
    case undefined : console.log('unkown.') ;  break ;
    default : 
    console.log(' miss.') ;
    }
} 


//fun('A') ;
fun(String('A')) ;  //A
fun(new String('A')) ;  //miss.
```

上面使用`String()` 强转为字符串时不会新创建一个字符串,如果使用`new String()`, 则会重新创建一个新的字符串。

相关文章

  • Web之JavaScript(散碎笔记)

    JavaScript有变量提升的特点, 全文件扫描js文件时会自动将声明变量提前,但是这里需要注意的一个地方是: ...

  • 之七  散碎笔记

    今天的内容自己的看法较少,主要是摘录或者转述,更应该看做是今天学习的报告吧。 一 积累 今天提到了三位结构大师,耐...

  • 2018-01-04

    Web学习笔记--从最基础的开始 一、web前端开发语言: HTML、 CSS 、JavaScript HTML:...

  • JavaScript基础,基础

    原javaScript学习笔记(一)js基础 一、简介 1、概述: JavaScript是目前web开发中不可缺少...

  • web前端入门基础

    web前端基础笔记 学习web前端开发基础技术需要掌握:HTML、CSS、JavaScript语言。下面我们就来了...

  • 《树莓派4B家庭服务器搭建指南》第十期:在树莓派部署Tiddly

    TiddlyWiki 是一个「非线性个人 Web 笔记本」,由「 javascript + CSS 样式 + HT...

  • JavaScript ☞ day2

    JavaScript基础学习笔记之JavaScript提升 了解时间 Date Date对象的方法 Date对象间...

  • JavaScript ☞ day3

    JavaScript基础学习笔记之JavaScript进阶 焦点事件 鼠标事件-单击与双击 鼠标事件-mouseo...

  • JavaScript ☞ day1

    JavaScript基础学习笔记之JavaScript基础 HTML中添加JS代码、注释方法、输出方式 docum...

  • Java web之JavaScript

    一、概述与作用 JavaScript(简称“JS”) 是一种解释型或即时编译型的编程语言。它是一门脚本语言(开发W...

网友评论

      本文标题:Web之JavaScript(散碎笔记)

      本文链接:https://www.haomeiwen.com/subject/isjhkttx.html