js基础(函数详解)

1.函数部分

例题1:编写一个将十六进制值转换为颜色的函数,以蓝色为例,#0000FF 应被表示成
rgb(0,0,255)的形式。然后将函数命名为 getRGB(),并用以下代码进行测试。提示:
可以将字符串视为数组,这个数组的元素为字符。

function getRGB(x){
    //拿到color的十六进制表示
    var color = x;
    //分成四部分,除了第一部分是‘#’,后面每一部分两位
    var one = '', two = '', three = '';
    for(var i = 1;i < 7;i++){
        if(i > 0 && i < 3){
            one+=x[i];
        }
        else if(i > 2 && i < 5){
            two+=x[i];
        }
        else if(i > 4 && i < 7){
            three+=x[i];
        }
    }



    //将每一个部分的十六进制表示转换成十进制表示
    //拼接成最终结果
    console.log('rgb('+parseInt(one,16)+','+parseInt(two,16)+','+parseInt(three,16)+')');
}
getRGB('#0000ff');

例题2:如果在控制台中执行以下各行,分别会输出什么内容?

parseInt(1e1);
parseInt(‘1e1’);
parseFloat(‘1e1’);

>parseInt(1e1);
10

>parseInt('1e1');
1

>parseFloat('1e1');
10

例题3:关于JavaScript的提升(hoisting)概念,下面的运行结果你一定会大跌眼镜

var a = 123;
function f() {
 alert(a);
 var a = 1;
 alert(a);
}
f(); 

您可能会想当然地认为 alert()第一次显示的是 123(也就是全局变量 a 的值),而
第二次显示的是 1(即局部变量 a)。但事实并非如此,第一个 alert()实际上显示的是
undefined,这是因为函数域始终优先于全局域,所以局部变量 a 会覆盖掉所有与它同名
的全局变量,尽管在 alert()第一次被调用时,a 还没有被正式定义(即该值为
undefined),但该变量本身已经存在于本地空间了。这种特殊的现象叫做提升(hoisting)。
也就是说,当 JavaScript 执行过程进入新的函数时,这个函数内被声明的所有变量都
会被移动(或者说提升)到函数最开始的地方。这个概念很重要,必须牢记。另外需要注
意的是,被提升的只有变量的声明,这意味着,只有函数体内声明的这些变量在该函数执
行开始时就存在,而与之相关的赋值操作并不会被提升,它还在其原来的位置上。譬如在
前面的例子中,局部变量本身被提升到了函数开始处,但并没有在开始处就被赋值为 1。
那个例子可以被等价地改写为:

var a = 123;
function f() {
 var a; // same as: var a = undefined;
 alert(a); // undefined
 a = 1;
 alert(a); // 1
} 

当然,我们也可以采用在最佳实践中提到过的单一 var 模式。在这个例子中,我们可
手动提升变量声明的位置,这样一来代码就不会被 JavaScript 的提升行为所混淆了。

2.对象部分

1.this默认指向的是全局对象window。其实指针在任何的编程语言中都是存在的,只是有些语言帮我们来自动管理指针,如:java,JavaScript等,这对于开发者来说很方便,可以提高开发速度。如果你去深入理解一门语言的底层时往往可以看到指针的存在。
2.推断对象类型

var toStr = Object.prototype.toString;
(function () {
    return toStr.call(arguments);
}());
/*输出"[object Arguments]"*/
var toStr = Object.prototype.toString;
toStr.call(document.body);
/*输出"[object HTMLBodyElement]"*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值