zoukankan      html  css  js  c++  java
  • 总结

    var str='abc123';
    num=parseInt(str);

    if(num==NaN){
    alert('NaN');
    }else if(num==123){
    alert('123');
    }else if(typeof(num)=='number'){
    alert('number');
    }else{
    alert('str');
    }

    结果:number,因为NaN和它自身是不相等的。

    var a=1;b='2';
    var c=a>b?(a<b?a:b):(a==b?a:b);

    结果:c='2',数据类型是:string


    var a=5&4;var b=5||4;

    结果:a=4 b=5

    for(var i=0;i<10;i++){
    alert(i);
    break;
    }
    alert(i);

    结果:0 0

    for(var i=0;i<10;i++){
    continue;
    alert(i);
    }
    alert(i);

    结果: 10


    var
    a=0; function fun(){ alert(a); var a=10; } fun(); alert(a);
    结果:undefined 0

    var o={};
    o.a=0;
    var b=o;
    b.a=10;
    alert(o.a);

    结果是:10

    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();

    结果:0 30

    var n=0;
    function a(){
    var n=10;
    function b(){
    n++;
    alert(n);
    }
    b();
    return b;
    }
    var c=a();
    c();
    alert(n);

    结果:11 12 0

    <!DOCTYPE html>
    <html>
    <body>
    <div id="btnBox">
    <input type="button" value="button_1" />
    <input type="button" value="button_2" />
    <input type="button" value="button_3" />
    <input type="button" value="button_4" />
    <input type="button" value="button_5" />
    </div>
    <script type="text/javascript">
    var inputs=document.getElementsByTagName('input');
    var l=inputs.length;
    for(var i=0;i<l;i++){

    /*inputs[i].onclick=function(){
    alert(i);
    }*/注释是错误代码

    (function(i){
    inputs[i].onclick=function(){
    alert(i);
    }
    })(i)
    }
    </script>
    </body>
    </html>

    下面做下分析:因为在for循环里面指定给list_obj[i].onclick的事件处理程序,也就是onclick那个匿名函数是在for循环执行完成后(用户单击链接时)才被调用的。而调用时,需要对变量i求值,解析程序首先会在事件处理程序内部查找,但i没有定义。然后,又到方法外部去查找,此时有定义,但i的值是4(只有i大于4才会停止执行for循环)。因此,就会取得该值——这正是闭包(匿名函数)要使用其外部作用域中变量的结果。而且,这也是由于匿名函数本身无法传递参数(故而无法维护自己的作用域)造成的。

    那现在原因是知道了,如何来避免这种情况呢?

    既然已经知道函数调用外部变量的时候就构成了一个闭包,里面的变量会受到别的地方的影响,那么我们

    现在要做的就是,构建一个只有自己本身才可访问的闭包,保存只供本身使用的变量

    不新建数组去重:

    function undulpicate(array){
    for(var i=0;i<array.length;i++) {
    for(var j=i+1;j<array.length;j++) {
    //注意 ===
    if(array[i]===array[j]) {
    array.splice(j,1);
    }
    }
    }
    return array;
    }

    var a=[1,2,3,4,4,3,2,1];
    var b=undulpicate(a);
    console.log(b);

    方法二:

    function unique(arr) {
    var result = [], hash = {};
    for (var i = 0, elem; (elem = arr[i]) != null; i++) {
    if (!hash[elem]) {
    result.push(elem);
    hash[elem] = true;
    }
    }
    return result;
    }
    var c=unique(a);
    console.log(c);

  • 相关阅读:
    python functools.lru_cache做备忘功能
    python clock装饰器 计算函数执行时间,执行结果及传入的参数
    python 闭包计算移动均值及nonlocal的使用
    使用 memoryview 和 struct 查看一个 GIF 图像的首部
    寻医问药 爬虫
    defaultdict使用及__missing__理解
    字典推导式
    collections deque队列及其他队列
    bisect 二分查找
    python array 使用创建10万浮点数
  • 原文地址:https://www.cnblogs.com/xiaotaiyang/p/5538264.html
Copyright © 2011-2022 走看看