Javascript forEach作为特殊变量

Javascript forEach作为特殊变量,javascript,jquery,svg,Javascript,Jquery,Svg,我试图理解这里使用svg制作的radial进度条的代码,但我无法理解下面部分中使用的var forEach。 它是某个特殊定义的变量,因为如果我们用其他变量(如temp等)替换它,它将不起作用,并且请解释传递到函数中的参数的来源 var forEach = function (array, callback, scope) { for (var i = 0; i < array.length; i++) { callback.call(scope, i, array[i

我试图理解这里使用svg制作的radial进度条的代码,但我无法理解下面部分中使用的var forEach。 它是某个特殊定义的变量,因为如果我们用其他变量(如temp等)替换它,它将不起作用,并且请解释传递到函数中的参数的来源

var forEach = function (array, callback, scope) {
     for (var i = 0; i < array.length; i++) {
     callback.call(scope, i, array[i]);
     }}
var-forEach=function(数组、回调、作用域){
对于(var i=0;i
以下是完整的代码: 将感谢您的帮助:)


$(文档).ready(函数(){
var con=“”;
$(“正文”)。前置(con);
var svg=document.createElements(“http://www.w3.org/2000/svg“,“svg”);
setAttributeNS(null,'width','200px');
setAttributeNS(null,'height','280px');
setAttributeNS(null,'class','progress');
setAttributeNS(null,'data progress','65');
$('.center').prepend(svg);
var path=document.createElements(“http://www.w3.org/2000/svg“,”路径“);
setAttributeNS(null,'class','fill');
setAttributeNS(null,'d',M5,40a35,3501,070,0a35,3501,0-70,0');
$(“svg”).prepend(路径);
var spath=document.createElements(“http://www.w3.org/2000/svg“,”路径“);
setAttributeNS(null,'class','track');
粘虫(null,'d','M5,40a35,35 0 1,0 70,0a35,35 0 1,0-70,0');
$(“svg”).prepend(spath);
var forEach=函数(数组、回调、作用域){
对于(var i=0;i
记住两件事:

  • 在JavaScript中,函数是数据。这意味着它们可以被指定为变量的值,就像其他数据一样。但是,由于它们是函数,您有两种方式与该数据交互:

    1a。作为数据:

     var x = function(){alert("test");};
     var y = x;
    
    1b。作为可调用代码:

     x(); // runs the function stored in x
    
  • 属性名称可以隐藏在较小的范围内
    forEach
    数组.prototype
    对象具有的属性名称,但属性名称可以被覆盖,从而导致标识符(属性名称)对给定范围具有不同的含义。在您的例子中,
    forEach
    实际上并没有隐藏
    Array.prototype
    forEach
    ,因为它没有被指定为该对象的属性名,但它只是一个保存函数数据并使其可调用的常规变量


  • 记住两件事:

  • 在JavaScript中,函数是数据。这意味着它们可以被指定为变量的值,就像其他数据一样。但是,由于它们是函数,您有两种方式与该数据交互:

    1a。作为数据:

     var x = function(){alert("test");};
     var y = x;
    
    1b。作为可调用代码:

     x(); // runs the function stored in x
    
  • 属性名称可以隐藏在较小的范围内
    forEach
    数组.prototype
    对象具有的属性名称,但属性名称可以被覆盖,从而导致标识符(属性名称)对给定范围具有不同的含义。在您的例子中,
    forEach
    实际上并没有隐藏
    Array.prototype
    forEach
    ,因为它没有被指定为该对象的属性名,但它只是一个保存函数数据并使其可调用的常规变量


  • var forEach

    这里我们定义了一个变量,该变量包含对函数的引用

    var forEach = function (array, callback, scope) {
         for (var i = 0; i < array.length; i++) {
         callback.call(scope, i, array[i]);
         }}
    
    函数(数组、回调、作用域)

    该函数接受三个参数:

    • 数组:我们可以遍历的数组
    • 回调:对函数的引用
    • 作用域:将用于运行回调的作用域(定义回调中的“This”)
    for(var i=0;i

    只是一个循环

    callback.call(作用域、i、数组[i])

    call()是函数类型的方法,它等同于只调用函数,就像执行callback()一样,但它还有一个额外的好处,即允许您在特定的作用域上运行函数。i、 e:

    var f = function(){
        console.log("Hi, " + this.name);
    };
    var scope1 = {name: "John"};
    var scope2 = {name: "Peter"};
    f.call(scope1);// logs Hi, John
    f.call(scope2);// logs Hi, Peter
    
    其他两个call()参数作为参数传递给函数

    var forEach = function (array, callback, scope) {
         for (var i = 0; i < array.length; i++) {
         callback.call(scope, i, array[i]);
         }}
    

    希望这能澄清源参数是如何工作的。

    var forEach

    这里我们定义了一个变量,该变量包含对函数的引用

    var forEach = function (array, callback, scope) {
         for (var i = 0; i < array.length; i++) {
         callback.call(scope, i, array[i]);
         }}
    
    函数(数组、回调、作用域)

    该函数接受三个参数:

    • 数组:我们可以遍历的数组
    • 回调:对函数的引用
    • 作用域:将用于运行回调的作用域(定义回调中的“This”)
    for(var i=0;i

    只是一个循环

    callback.call(作用域、i、数组[i])

    call()是函数类型的方法,它等同于只调用函数,就像执行callback()一样,但它还有一个额外的好处,即允许您在特定的作用域上运行函数。i、 e:

    var f = function(){
        console.log("Hi, " + this.name);
    };
    var scope1 = {name: "John"};
    var scope2 = {name: "Peter"};
    f.call(scope1);// logs Hi, John
    f.call(scope2);// logs Hi, Peter
    
    其他两个call()参数作为参数传递给函数

    var forEach = function (array, callback, scope) {
         for (var i = 0; i < array.length; i++) {
         callback.call(scope, i, array[i]);
         }}
    

    希望这能澄清源参数的工作原理。

    是的,有人制作了自己的
    forEach
    函数,它的工作原理似乎与本机函数类似,只是它接受任何长度的内容,包括节点列表。它只是一个与任何其他函数一样的函数?用任何其他名称(如
    temp
    )替换
    forEach
    )根本不是问题